Коли я намагаюся запустити такий фрагмент SQL усередині цикла курсору,
set @cmd = N'exec sp_rename ' + @test + N',' +
RIGHT(@test,LEN(@test)-3) + '_Pct' + N',''COLUMN'''
Я отримую таке повідомлення,
Повідомлення 15248, рівень 11, стан 1, процедура sp_rename, рядок 213
Або параметр@objname
неоднозначний, або заявлена@objtype
(СТОЛЬЦА) помилкова.
Що не так і як це виправити? Я спробував обернути назву стовпця в дужки []
та подвійні лапки, ""
як пропонують деякі результати пошуку.
Редагувати 1 -
Ось і весь сценарій. Як передати ім'я таблиці перейменуванню sp? Я не знаю, як це зробити, оскільки імена стовпців знаходяться в одній з багатьох таблиць.
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
Редагування 2 - Сценарій призначений для перейменування стовпців, імена яких відповідають шаблону, в даному випадку з префіксом "pct". Стовпці містяться в різних таблицях бази даних. Усі назви таблиць мають префікс "TestData".