我需要遍历所有以特定前缀开头的表来重命名它们。我尝试过的代码如下,但它以两个结果中的一个结束,要么崩溃SSMS(有时候),要么我在下面得到每个表的错误消息。我已经尝试了dbo
。
任何人都可以告诉我我做错了什么或者建议更好的方法吗?
No item by the name of 'dbo.prefix_TableName' could be found in the current database 'DatabaseName', given that @itemtype was input as '(null)'.
这是我正在运行的代码......
SET NOCOUNT ON;
USE [DatabaseName];
DECLARE @oq NVARCHAR(5), @tableName NVARCHAR(128), @newTableName NVARCHAR(128);
SET @oq = N'prefix_';
/*
find and rename all tables
*/
DECLARE [tableCursor] CURSOR FOR
SELECT [TABLE_NAME] FROM INFORMATION_SCHEMA.TABLES
WHERE [TABLE_TYPE] = 'BASE TABLE' AND [TABLE_NAME] LIKE @oq + '%'
ORDER BY [TABLE_NAME];
OPEN [tableCursor]
FETCH NEXT FROM [tableCursor] INTO @tableName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @newTableName = REPLACE(@tableName, @oq, N'');
EXEC('EXEC sp_rename ''dbo.' + @tableName + ''', ''' + @newTableName + '''');
END
CLOSE [tableCursor];
DEALLOCATE [tableCursor];
答案 0 :(得分:0)
没有游标的简单解决方案
xor edi,edi
mov eax, 231
syscall ; sys_exit_group(0)
在你的例子中,nvarchar(5)导致截断,你可能需要nvarchar(7)或nvarchar(max)。