Cuando intento ejecutar el siguiente fragmento de código SQL dentro de un bucle de cursor,
set @cmd = N'exec sp_rename ' + @test + N',' +
RIGHT(@test,LEN(@test)-3) + '_Pct' + N',''COLUMN'''
Recibo el siguiente mensaje,
Msg 15248, nivel 11, estado 1, procedimiento sp_rename, línea 213
O el parámetro@objname
es ambiguo o el reclamo@objtype
(COLUMN) es incorrecto.
¿Qué está mal y cómo lo soluciono? Intenté poner el nombre de la columna entre corchetes []
y comillas dobles, ""
como sugirieron algunos de los resultados de búsqueda.
Editar 1 -
Aquí está el guión completo. ¿Cómo paso el nombre de la tabla al cambio de nombre sp? No estoy seguro de cómo hacerlo, ya que los nombres de las columnas están en una de las muchas tablas.
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
Edición 2: el script está diseñado para cambiar el nombre de las columnas cuyos nombres coinciden con un patrón, en este caso con un prefijo "pct". Las columnas se encuentran en una variedad de tablas dentro de la base de datos. Todos los nombres de las tablas tienen el prefijo "TestData".