Como faço para buscar várias colunas para usar em um loop de cursor?
Quando tento executar o seguinte snippet SQL dentro de um loop de cursor,
set @cmd = N'exec sp_rename ' + @test + N',' +
RIGHT(@test,LEN(@test)-3) + '_Pct' + N',''COLUMN'''
Eu recebo a seguinte mensagem
Msg 15248, nível 11, estado 1, procedimento sp_rename, linha 213
O parâmetro@objname
é ambíguo ou o reivindicado@objtype
(COLUNA) está errado.
O que está errado e como conserto? Eu tentei envolver o nome da coluna entre colchetes[]
e aspas duplas""
como alguns dos resultados da pesquisa sugeridos.
Editar 1 -
Aqui está o roteiro inteiro. Como faço para passar o nome da tabela para o renomear sp? Não sei como fazer isso, pois os nomes das colunas estão em uma das muitas tabelas.
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 - O script é projetado para renomear colunas cujos nomes correspondem a um padrão, neste caso com um prefixo "pct". As colunas ocorrem em uma variedade de tabelas no banco de dados. Todos os nomes de tabelas são prefixados com "TestData".