Comment puis-je récupérer plusieurs colonnes pour une utilisation dans un curseur de la boucle?
Lorsque j'essaie d'exécuter le code SQL à l'intérieur d'un curseur boucle,
set @cmd = N'exec sp_rename ' + @test + N',' +
RIGHT(@test,LEN(@test)-3) + '_Pct' + N',''COLUMN'''
Je reçois le message suivant,
Msg 15248, Niveau 11, État 1, Procédure sp_rename, la Ligne 213
Soit le paramètre@objname
est ambigu ou le prétendu@objtype
(COLONNE) est erroné.
Quel est le problème et comment puis-je résoudre ce problème ? J'ai essayé d'habillage de la colonne de nom entre parenthèses []
, et les guillemets ""
comme certains des résultats de recherche proposé.
Edition 1 -
Voici le script en entier. Comment puis-je passer le nom de la table pour le renommer sp ? Je ne suis pas sûr de la façon de le faire depuis que les noms de colonne sont dans l'une des nombreuses tables.
BEGIN TRANSACTION
declare @cnt int
declare @test nvarchar(128)
declare @cmd nvarchar(500)
declare Tests cursor for
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE 'pct%' AND TABLE_NAME LIKE 'TestData%'
open Tests
fetch next from Tests into @test
while @@fetch_status = 0
BEGIN
set @cmd = N'exec sp_rename ' + @test + N',' + RIGHT(@test,LEN(@test)-3) + '_Pct' + N', column'
print @cmd
EXEC sp_executeSQL @cmd
fetch next from Tests into @test
END
close Tests
deallocate Tests
ROLLBACK TRANSACTION
--COMMIT TRANSACTION
Edit 2 -
Le script est conçu pour renommer des colonnes dont les noms correspondent à un modèle, dans ce cas avec un "pct" préfixe. Les colonnes se produire dans une variété de tables dans la base de données. Tous les noms de tables avec le préfixe "TestData".
- cette ligne de concaténer une chaîne de caractères. pourquoi ne pas l'imprimer, de sorte que vous pouvez voir ce que la chaîne du contenu,
@test
a la formulaire detable.column
ouschema.table.column
, n'est-ce pas?- Si @test contient le nom qualifié, il doit être dans apostrophes. Si la même hypothèse tient, droite() permet de supprimer les trois premiers caractères dans le nom de la table; en vous vouliez remplacer le dernier caractère du nom de la colonne, ce serait
LEFT
. Pourriez-vous s'il vous plaît élargir le script un peu en ajoutant set @test = ...? - Votre code en fait m'a aidé à résoudre mon problème merci pour ça!
Vous devez vous connecter pour publier un commentaire.
Ici est la version légèrement modifiée. Des changements sont à noter comme code commentaire.
@var1,
@var2