Lorsque j'essaie d'exécuter le snippet SQL suivant à l'intérieur d'une boucle de curseur,
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, Ligne 213
Soit le paramètre@objname
est ambiguë ou que la demande@objtype
(COLONNE) est erronée.
Quel est le problème et comment le résoudre ? J'ai essayé de mettre le nom de la colonne entre parenthèses. []
et les guillemets ""
comme le suggèrent certains résultats de recherche.
Edit 1 -
Voici l'intégralité du script. Comment puis-je passer le nom de la table au sp rename ? Je ne suis pas sûr de savoir comment faire puisque les noms des colonnes sont dans 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
Edition 2 - Le script est conçu pour renommer les colonnes dont les noms correspondent à un modèle, dans ce cas avec un préfixe "pct". Les colonnes se trouvent dans une variété de tables dans la base de données. Tous les noms de tables sont préfixés par "TestData".