Probleme ALTER TABLE DANS BOUCLE WHILE AVEC NOM DE TABLE DIFFERENT A CHAQUE ITER

Résolu
cs_vds Messages postés 11 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 1 novembre 2005 - 31 oct. 2005 à 17:27
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 - 1 nov. 2005 à 18:31
Bonjour, je travaille sous sql server et je dois écrire une procédure stockée qui:


-Récupere et enregistre dans la table "TableTemp" le nom de certaines table contenues dans ma base de données

-Parcourir la table "TableTemp" et pour chaque ligne , insérer deux colones dans la table correspondant au nom récupéré

-Supprimer la table "TableTemp"

Voici mon code:

CREATE PROCEDURE Ajout_Enregistrement

AS
CREATE TABLE TableTemp(
ID int(4) NOT NULL IDENTITY(1, 1),
Nom NVARCHAR(50),
PRIMARY KEY(ID)
)
INSERT INTO TableTemp(Nom)
SELECT name FROM sysobjects WHERE xtype like 'U' AND name like '%[_]%'


DECLARE @currentLine int
DECLARE @nbLine int
SELECT @currentLine = 1
SELECT @nbLine = (select count(*) from TableTemp)


WHILE @currentLine <= @nbLine
BEGIN
DECLARE @nomTable nvarchar(50)
SELECT @nomTable = (SELECT Nom FROM TableTemp WHERE [mailto:ID=@currentLine ID=@currentLine])


ALTER TABLE @nomTable
ADD newColumn nvarchar(50)
END


DROP TABLE TableTemp
GO

Mon proble se pose sur le "ALTER TABLE" car j'ai l'erreur "Syntaxe incorrecte vers @NomTable"

J'ai tout essayé (les guillemets, les quotes, les parentheses....) mais j'ai toujours le m^me probleme.

Si quelqu'un peux venir à mon secours ça serait vraiment top!
Merci d'avance!

3 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
1 nov. 2005 à 14:19
Salut

Pour faire avancer le probleme voici quelques pistes
à explorer la creation de table temporaire est a faire
avec un # devant la table je pense que c'est plus rapide.


SELECT name FROM sysobjects into #tabletemp WHERE xtype like 'U' AND name like '%[_]%'

ensuite pour le parcours des tables tu peux utiliser les curseurs pour faire la boucle

apres pour les l'ajout des colonnes le ne pense pas que tu puis le faire comme cela

il faut faire la chaine de caractere
et apres appeler un
declare @strsql as varchar(4000)
set @strsql = ' ALTER TABLE ' + @nomTable + 'ADD newColumn nvarchar(50) END'
exec @strsql

et le probleme doit etre resolu.
3
cs_vds Messages postés 11 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 1 novembre 2005
1 nov. 2005 à 15:54
Ok super merci beaucoup!!

Ca marche tres bien en faisant exec(@strsql) et non exec @strsql car sinon @strsql est considérée comme une procédure stockée qui bien évidemment n'existe pas.

En tous les cas merci pour ton aide!
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
1 nov. 2005 à 18:31
J'avais oublié au passage pour les tables temporaires il faut les dropper

Voila pour le complément

Pour l'erreur c'est pas évident de repondre de tete
0
Rejoignez-nous