迭代并重命名具有对象限定符MSSQL的所有表

时间:2017-11-18 01:39:23

标签: sql sql-server tsql

我需要遍历所有以特定前缀开头的表来重命名它们。我尝试过的代码如下,但它以两个结果中的一个结束,要么崩溃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];

1 个答案:

答案 0 :(得分:0)

没有游标的简单解决方案

xor    edi,edi
mov    eax, 231
syscall            ; sys_exit_group(0)

在你的例子中,nvarchar(5)导致截断,你可能需要nvarchar(7)或nvarchar(max)。