1
我需要遍历所有以特定前缀开头的表来重命名它们。我试过的代码在下面,但是它以两个结果中的一个结束,或者崩溃了SSMS(有时),或者我得到了每个表下面的错误消息。我用dbo
试过。遍历并重命名所有带有对象限定符的表MSSQL
任何人都可以告诉我我做错了什么或者建议更好的方法来做到这一点?
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];
你错过了while循环中的一个FETCH语句 – Squirrel
谢谢@Squirrel ...这是问题。你应该把它作为答案。 –