2010-09-22 88 views
4

我通过sp_RENAME改名为表(SQL SERVER 2008)SQL Server 2008中:sp_RENAME表不见了

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

得到的消息(这是在黑色 - 所以我得到它只是一个警告或成功的消息)就像是“小心:更改对象名称的任何部分可能会中断脚本和存储过程。”

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

:)你们有什么想法把我的表带回来吗? :)

p.s.是啊,我的笑容是不是“:(”,因为当问题的严重性上升的门槛,“:(”变为“:)”。

回答

8
  • 这说明了什么?
    SSMS不刷新对象资源管理器自动执行,因此它可能是有

    使用DBNAME SELECT OBJECT_ID( 'scname.newtblnam')

  • sp_rename

你只能在当前数据库 改变一个物体 或数据类型的名称。大部分系统数据的名称 类型和系统对象不能被 更改。

您指定dbname,所以有可能你在dbo架构(或类似)

  • 对象[dbname.scname.newtblnam],做你第一次做备份?之前的任何(正式)架构更改最佳实践,你知道

FWIW,我从来没有使用sp_rename

+0

是的,它在模式“scname”下,但名称是“dbname.scname .newtblnam”。我没有意识到,因为有数百张桌子。谢谢。 – 2010-09-22 11:03:56

1

面临着可怕的错误太多,这里是解决方案失去了一个表或其他对象:

在[]
--original 
sp_RENAME 'dbname.scname.oldtblname', 'dbname.scname.newtblnam' 

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

名称实际上是sp_rename后您的表名,使SQL服务器能理解把它放在方括号。

2

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