1

通过 SQL Server 2014,CREATE TYPE ... TABLE不支持命名检查约束。

这反过来会导致带有神秘名称(例如CK__TT_Income__Incom__72BBEAA9)的检查约束。

此类约束一直存在sys.check_constraints,但我无法使用 重命名其中一个sp_rename

所有重命名与表类型关联的约束的尝试都会导致以下错误消息:

消息 15248,级别 11,状态 1,过程 sp_rename,第 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'

接下来试试table类型的内部形式

EXECUTE sp_rename   
          N'TT_IncomeCodeTable_71C7C670.CK__TT_Income__Incom__72BBEAA9', 
          N'CK_TT_IncomeCodeTable', 'object'

最后试试table类型的“user”形式

EXECUTE sp_rename N'IncomeCodeTable.CK__TT_Income__Incom__72BBEAA9', 
                  N'CK_TT_IncomeCodeTable', 'object'

底线,有没有办法重命名与用户定义的表类型关联的检查约束?

4

2 回答 2

0

首先找到约束并将其删除,然后使用允许您设置名称的 Alter Table 重新创建它。不幸的是,这需要您输入约束的定义。使用可以从现有表生成 DDL 的工具可能对此有用。例如:MSSMS

于 2017-11-15T15:28:58.147 回答
0

这是投机...

文档对此似乎不太清楚,但我最好的猜测是您根本无法重命名约束,因为文档指出:

用户自定义表类型定义创建后无法修改。

重命名约束会改变类型。至少我是这样解释的。虽然我可能会误解它,但我还没有找到任何其他合理的解释。

于 2015-08-06T15:39:52.170 回答