cs_vds
Messages postés11Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention 1 novembre 2005
-
31 oct. 2005 à 17:27
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 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!
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 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
cs_vds
Messages postés11Date d'inscriptionmercredi 23 février 2005StatutMembreDerniè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.