sql server 2008:sp_RENAME表消失了

时间:2010-09-22 10:34:07

标签: sql sql-server

我通过sp_RENAME(SQL SERVER 2008)

重命名了表
sp_RENAME 'dbname.scname.oldtblname' 'dbname.scname.newtblnam'

结果消息(它是黑色的 - 所以我只是一个警告或成功的消息)就像“警告:更改对象名称的任何部分可能会破坏脚本和存储过程。”

所以在这个命令之后我的表有4500万条记录消失了,我没有任何备份。这是一张新桌子。

:)你们有什么想要把我的桌子带回来吗? :)

P.S。是的,我的笑容不是“:(”,因为当问题的严重性达到阈值时,“:(”变成“:)”。

3 个答案:

答案 0 :(得分:8)

  • 这是什么意思?
    SSMS不会自动刷新对象资源管理器,因此它可能就在那里

    USE dbname SELECT OBJECT_ID('scname.newtblnam')

  • sp_rename

  

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

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

  • 你先做了备份吗?任何(正式)架构变更之前的最佳实践,你知道

FWIW,我从未使用sp_rename丢失表或其他对象

答案 1 :(得分:4)

面对那个可怕的错误,这里是解决方案:

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

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

[]中的名称实际上是sp_rename之后的TABLE名称,以使SQL服务器理解它将其放在方括号中。

答案 2 :(得分:3)

我发现这有点不清楚,但阅读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'