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 de table.column ou schema.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!
InformationsquelleAutor Joe | 2012-06-14