我创建了一个脚本来重命名我复制到另一个数据库中的表。但是,当我运行它时,它给出了一个错误,说重命名的表正在使用中。这是它重命名的第二个表。 错误消息"错误:新名称' IPro_ALERT_1604220600'已经被用作对象名称,并且会导致不允许的重复。"
我不确定为什么会出现这个错误,我已经浏览了这个网站和其他地方,我认为我的代码应该可行。关于它是什么/为什么这样做的任何想法?
提前致谢。
重命名表格的代码:
USE [II_to_IIRP]
BEGIN
SET NOCOUNT ON;
DECLARE @table_name SYSNAME
DECLARE @table_part SYSNAME
DECLARE comp_cursor cursor FOR
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_NAME LIKE '%_1604220600'
ORDER BY TABLE_NAME
OPEN COMP_CURSOR
FETCH NEXT FROM COMP_CURSOR INTO @table_name
SET @table_part = 'IPro_' + @table_name
WHILE (@@fetch_status = 0 and @@error = 0 )
BEGIN
PRINT 'Changing table Name '+@table_name
EXEC sp_rename @table_name, @table_part
PRINT 'Done Changing table '+@table_name
SELECT 'drop table dbo.'+@table_name where @table_name <> @table_part
FETCH NEXT FROM COMP_CURSOR INTO @table_name
PRINT 'Getting next table ' + @table_name
END
CLOSE COMP_CURSOR
DEALLOCATE COMP_CURSOR
END;
答案 0 :(得分:0)
可能是因为您正在修改光标正在读取的数据。尝试将光标中的数据插入临时表中,然后将此表用作光标。
DECLARE @table_name SYSNAME
DECLARE @table_part SYSNAME
SELECT TABLE_NAME
INTO #TEMPTABLES
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_NAME LIKE '%_1604220600'
ORDER BY TABLE_NAME
DECLARE comp_cursor cursor FOR
SELECT TABLE_NAME FROM #TEMPTABLES
答案 1 :(得分:0)
错误实际上非常清楚。您正在尝试将表重命名为已存在的名称。 你忘了包括:
SET @table_part = 'IPro_' + @table_name
在游标循环中,因此您将重命名下一个与前一个名称相同的表。