通过SQL Server 2014,CREATE TYPE ... TABLE
不支持命名检查约束。
这反过来导致使用神秘的名称(例如CK__TT_Income__Incom__72BBEAA9
)检查约束。
此类限制在sys.check_constraints
中保留,但我无法使用sp_rename
重命名其中一个。
所有尝试重命名与表类型关联的约束都会导致以下错误消息:
Msg 15248,Level 11,State 1,Procedure sp_rename,Line 424
参数@objname不明确或声称@objtype(对象)错误。
这是我的桌子类型:
CREATE TYPE IncomeCodeTable AS
TABLE(IncomeCode char(1)
CHECK (IncomeCode IN ('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z', '1', '2', '3', '4'))
)*
最正确的"尝试是以下列表中的第一个:
EXECUTE sp_rename N'sys.CK__TT_Income__Incom__72BBEAA9',
N'CK_TT_IncomeCodeTable', 'object'
接下来,尝试表格类型的内部形式
EXECUTE sp_rename
N'TT_IncomeCodeTable_71C7C670.CK__TT_Income__Incom__72BBEAA9',
N'CK_TT_IncomeCodeTable', 'object'
最后,试试"用户"表格类型的形式
EXECUTE sp_rename N'IncomeCodeTable.CK__TT_Income__Incom__72BBEAA9',
N'CK_TT_IncomeCodeTable', 'object'
最重要的是,有没有办法重命名与用户定义的表类型相关联的检查约束?
答案 0 :(得分:0)
这是推测......
文档似乎不是很清楚,但我最好的猜测是你根本无法重命名约束,因为文档说明:
用户定义的表类型定义后不能修改 创建
并重命名约束会改变类型。至少这是我解释它的方式。我可能会误解它,但我没有找到任何其他合理的解释。
答案 1 :(得分:0)
首先找到约束并删除它然后使用Alter Table重新创建它,它允许您设置名称。不幸的是,这需要您输入约束的定义。使用可以从现有表生成DDL的工具可能对此有用。例如:MSSMS