我通过sp_RENAME(SQL SERVER 2008)
重命名了表sp_RENAME 'dbname.scname.oldtblname' 'dbname.scname.newtblnam'
结果消息(它是黑色的 - 所以我只是一个警告或成功的消息)就像“警告:更改对象名称的任何部分可能会破坏脚本和存储过程。”
所以在这个命令之后我的表有4500万条记录消失了,我没有任何备份。这是一张新桌子。
:)你们有什么想要把我的桌子带回来吗? :)
P.S。是的,我的笑容不是“:(”,因为当问题的严重性达到阈值时,“:(”变成“:)”。
答案 0 :(得分:8)
这是什么意思?
SSMS不会自动刷新对象资源管理器,因此它可能就在那里
USE dbname SELECT OBJECT_ID('scname.newtblnam')
您可以更改对象的名称 或当前数据库中的数据类型 只要。大多数系统数据的名称 类型和系统对象不可能 改变。
您指定了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'