SQL Server 2008:sp_RENAME表消失

6

我使用sp_RENAME(SQL SERVER 2008)重命名了数据表。

sp_RENAME 'dbname.scname.oldtblname' 'dbname.scname.newtblnam'

结果提示信息(它是黑色的-所以我认为它只是一个警告或成功的消息)类似于“注意:更改对象名称的任何部分都可能会破坏脚本和存储过程。” 因此,在这个命令之后,我的拥有4500万条记录的表格就消失了,我没有任何备份。这是一个新表格。 :) 你们有任何关于如何恢复我的表格的想法吗? :) P.S. 是的,我的微笑不是“:(”,因为当问题的严重程度提高时,阈值也会提高,“:(”变成了“:)”。
3个回答

9
  • 这是什么意思?
    SSMS不会自动刷新对象资源管理器,所以可能会出现此情况。

    USE dbname SELECT OBJECT_ID('scname.newtblnam')

  • sp_rename说:

您只能更改当前数据库中对象或数据类型的名称。大多数系统数据类型和系统对象的名称不能更改。

您指定了dbname,因此您可能在dbo模式(或类似模式)中拥有一个对象 [dbname.scname.newtblnam]

  • 您是否先备份了?在任何(正式的)架构更改之前最好备份一下,你懂的。

顺便说一句,我使用sp_rename从未丢失过表或其他对象。


是的,它在模式“scname”下,但名称是“dbname.scname.newtblnam”。由于有数百个表格,我没有意识到这一点。谢谢。 - Azho KG

6

我也遇到了这个可怕的bug,以下是解决方案:

--original
sp_RENAME 'dbname.scname.oldtblname', 'dbname.scname.newtblnam' 

--workaround 
sp_RENAME 'dbname.scname.[dbname.scname.newtblnam]','oldtblname' 

方括号[]中的名称实际上是您在使用sp_rename重命名后的表名,为了让SQL Server能够理解它,请将其放入方括号中。


4

我发现这有点不清楚,但是阅读 sp_rename 的文档后得知:

exec sp_rename 'udt.TenorSymbol_t_temp', 'udt.TenorSymbol_t', 'USERDATATYPE'

将创建一种类型

udt.udt.TenorSymbol_t

因此,在重命名时不要指定模式,以便在正确的模式中创建类型。

exec sp_rename 'udt.TenorSymbol_t_temp', 'TenorSymbol_t', 'USERDATATYPE'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接