Khi tôi cố gắng chạy đoạn mã SQL sau bên trong vòng lặp con trỏ,
set @cmd = N'exec sp_rename ' + @test + N',' +
RIGHT(@test,LEN(@test)-3) + '_Pct' + N',''COLUMN'''
Tôi nhận được tin nhắn sau,
Msg 15248, Mức 11, Trạng thái 1, Thủ tục sp_rename, Dòng 213
Hoặc tham số@objname
không rõ ràng hoặc xác nhận quyền sở hữu@objtype
(COLUMN) là sai.
Điều gì là sai và làm thế nào để tôi sửa chữa nó? Tôi đã thử đặt tên cột trong dấu ngoặc []
và dấu ngoặc kép ""
như một số kết quả tìm kiếm được đề xuất.
Chỉnh sửa 1 -
Đây là toàn bộ kịch bản. Làm cách nào để chuyển tên bảng sang tên sp? Tôi không chắc làm thế nào để làm điều đó vì tên cột nằm ở một trong nhiều bảng.
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
Chỉnh sửa 2 - Tập lệnh được thiết kế để đổi tên các cột có tên khớp với một mẫu, trong trường hợp này là tiền tố "pct". Các cột xuất hiện trong nhiều bảng trong cơ sở dữ liệu. Tất cả các tên bảng đều có tiền tố là "TestData".