[procedure stockee] - Dupliquer une table et son contenu

- Dupliquer une table et son contenu [procedure stockee] - SQL/NoSQL - Programmation

Marsh Posté le 11-01-2006 à 13:45:23    

Bonjour,  
 
Dans une procedure stockee, apres la creation d'une table 'TEST445' je souhaite copier tous les enregistrement (env 300) de la table 'Articles' qui a la meme structure.  
 
Le code suivant est incomplet, je pense qu'il faut une boucle, mais je suis perdu ... A l'aide !  
 

Code :
  1. CREATE PROCEDURE [dbo].[NEWTABLE]
  2. AS
  3. CREATE TABLE TEST445
  4. (
  5. Id int PRIMARY KEY IDENTITY(1,1),
  6. ReferenceEmape nvarchar(255) NULL,
  7. Designation nvarchar(255) NULL,
  8. Type nvarchar(255) NULL,
  9. MarqueComp nvarchar(255) NULL,
  10. ModeleComp nvarchar(255) NULL,
  11. PrixHT money,
  12. Favoris Bit
  13. )
  14. SELECT ReferenceEmape, Designation, Type, MarqueComp, ModeleComp, PrixHT, Favoris FROM Articles
  15. INSERT INTO TEST445 (ReferenceEmape, Designation, Type, MarqueComp, ModeleComp, PrixHT, Favoris)
  16. VALUES ('@RefEMAPE', '@Designation', '@Type','@Marque','@Modele','@PrixHT', 0)
  17. GO


Reply

Marsh Posté le 11-01-2006 à 13:45:23   

Reply

Marsh Posté le 11-01-2006 à 13:50:36    

Ah, j'oubliais
SGBD = Sql Serveur
Si ca peut aider ....

Reply

Marsh Posté le 11-01-2006 à 14:50:17    

select lenomdeschamps into lanouvelletable from latableacopier

Reply

Marsh Posté le 11-01-2006 à 14:51:11    

ze bèteur fort iou hize :
 
select *
into test445
from articles

Reply

Marsh Posté le 11-01-2006 à 15:19:10    

Bas mince alors, 20 ligne en 3 c'est vraiment de la balle
 
Merci arjuna

Reply

Marsh Posté le 11-01-2006 à 15:35:23    

de rien :)
 
avec la plupart des autres SGBD ce serait :
 
create table destination
as
select * from source
 
mais SQL Server ne supporte pas cette syntaxe
 
(par contre, pour la plupart des autres SGBD, le "INTO" permet l'affectation du résultat du select dans des variables de script :pt1cable:)


Message édité par Arjuna le 11-01-2006 à 15:35:59
Reply

Marsh Posté le 11-01-2006 à 16:18:22    

Un grand merci arjuna
 
Derniere question. La requete
 
SELECT * INTO TEST FROM Articles
 
marche parfaitement toute seule, mais j'ai besoin d'avoir le nom de la table 'TEST dans l'exemple' different a chaque lancement de la procedure.
Avec la variable @IdGrille je doit recuperer le champ 'Nom' de la table 'GrilleTarifaire' qui va me donner le nom de la nouvelle table a creer
 
Pour l'instant j'ai :
 
CREATE PROCEDURE [dbo].[TTT] (@IdGrille int)
 
AS
 
DECLARE @NOMTABLE
SELECT @NOMTABLE = Nom FROM GrilleTarifaire WHERE Id=@IdGrille
 
execute 'SELECT * INTO' + @NOMTABLE + 'FROM Articles'
 
GO
 
Mais il y a des problemes de syntaxe.
Peux tu y jettes un oeuil stp.
 

Reply

Marsh Posté le 11-01-2006 à 16:24:56    

esaces entre les mots et les " ' "
 
sinon ça fait INTOtrucmucheFROM

Reply

Marsh Posté le 11-01-2006 à 16:29:36    

Ok, pour ca mais ...
 
CREATE PROCEDURE [dbo].[TTT] (@IdGrille int)  
AS  
DECLARE @NOMTABLE  
SELECT @NOMTABLE = Nom FROM GrilleTarifaire WHERE Id=@IdGrille  
 
execute 'SELECT * INTO ' + @NOMTABLE + ' FROM Articles'  
GO  
 
Mais j'ai encore des erreur:
 
Syntaxe incorrecte vers le mot clé 'SELECT'.
La variable '@NOMTABLE' doit être déclarée.

Reply

Marsh Posté le 11-01-2006 à 16:31:53    

Et si tu précises un type à ta variable, lors de sa déclaration ?


Message édité par Elmoricq le 11-01-2006 à 16:32:09
Reply

Marsh Posté le 11-01-2006 à 16:31:53   

Reply

Marsh Posté le 11-01-2006 à 16:36:45    

effectivement je n'est plus qu'une erreur
Ligne 6 : syntaxe incorrecte vers 'SELECT * INTO '.

Reply

Marsh Posté le 11-01-2006 à 16:48:48    

fait un "print" de la commande

Reply

Marsh Posté le 11-01-2006 à 16:50:48    

CREATE PROCEDURE [dbo].[TTT] (@IdGrille int)  
AS  
DECLARE @NOMTABLE varchar
SELECT @NOMTABLE = Nom FROM GrilleTarifaire WHERE Id=@IdGrille  
 
exec 'SELECT * INTO ' + @NOMTABLE + ' FROM Articles'  
GO

Reply

Marsh Posté le 11-01-2006 à 16:53:24    

nan, remplace "exec" par "print" et poste ce que ça donne ;)

Reply

Marsh Posté le 11-01-2006 à 16:54:30    

arf, je crois que je sais !
 
declare @sqlstatement varchar
select @sqlstatement = 'SELECT * INTO ' + @NOMTABLE + ' FROM Articles'
 
exec @sqlstatement

Reply

Marsh Posté le 11-01-2006 à 16:55:09    

si ça marche pas, poste ce que contient @sqlstatement et vérifie que exec prends bien un varchar dans la doc
 
 
tu peux essayer aussi :
 
exec ('select ... ' ... ' ...')
 
entre ()
 
en effet, il prends peut-être ton "+" comme un second paramètre, SQL Server n'est pas très fort pour interpréter les instructions à l'appel d'une fonction


Message édité par Arjuna le 11-01-2006 à 16:57:58
Reply

Marsh Posté le 11-01-2006 à 17:00:21    

print a la place de exec marche dans la syntaxte.
 
MAIS,
 
dans ton dernier post, n'oublie pas qu'il me faut la variable @NOMTABLE de precedent SELECT. A moins que l'on puisse les mettre a la suite ?

Reply

Marsh Posté le 11-01-2006 à 17:05:08    

déjà, essaie en passant par une variable temporaire.
 
sinon :
 
exec ('SELECT * INTO ' + @NOMTABLE + ' FROM Articles')
 
pourrait éventuellement peut-être fonctionner

Reply

Marsh Posté le 11-01-2006 à 17:13:48    

Deja essayer avec les parantheses. MArche pas.
 
En fait l'analyseur de requete SQL me dis OK, mais quand je passe la variable @IdGrille via ASP ca me balance
 
ExecuteSQL Error. [Microsoft][ODBC SQL Server Driver]Champ COUNT incorrect ou erreur de syntaxe  

Reply

Marsh Posté le 11-01-2006 à 19:59:19    

"count" c'est visiblement pas dans cette partie que ça déconne alors...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed