- Dupliquer une table et son contenu [procedure stockee] - SQL/NoSQL - Programmation
Marsh Posté le 11-01-2006 à 14:50:17
select lenomdeschamps into lanouvelletable from latableacopier
Marsh Posté le 11-01-2006 à 14:51:11
ze bèteur fort iou hize : 
 
select * 
into test445 
from articles
Marsh Posté le 11-01-2006 à 15:19:10
Bas mince alors, 20 ligne en 3 c'est vraiment de la balle 
 
Merci arjuna
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  )
)
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. 
 
Marsh Posté le 11-01-2006 à 16:24:56
esaces entre les mots et les " ' " 
 
sinon ça fait INTOtrucmucheFROM
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.
Marsh Posté le 11-01-2006 à 16:31:53
Et si tu précises un type à ta variable, lors de sa déclaration ?
Marsh Posté le 11-01-2006 à 16:36:45
effectivement je n'est plus qu'une erreur 
Ligne 6 : syntaxe incorrecte vers 'SELECT * INTO '.
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 
Marsh Posté le 11-01-2006 à 16:53:24
nan, remplace "exec" par "print" et poste ce que ça donne 
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
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
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 ?
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
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  
Marsh Posté le 11-01-2006 à 19:59:19
"count" c'est visiblement pas dans cette partie que ça déconne alors...
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 !