Sql 在UDT字段中排除空值的唯一约束

Sql 在UDT字段中排除空值的唯一约束,sql,sql-server,Sql,Sql Server,我使用的是SQL Server 2012,我有以下用户定义的表类型 CREATE TYPE [dbo].[IdentifierCodeTable] AS TABLE( [Id] [dbo].[Identifier] NULL, [Code] [dbo].[Code] NULL ) 我试图强制执行Id必须是唯一的,除了NULL值。 我有以下代码,它对非NULL值运行良好,但当我尝试插入2个NULL值时,它不允许我这样做 CREATE TYPE [dbo].[IdentifierC

我使用的是SQL Server 2012,我有以下用户定义的表类型

CREATE TYPE [dbo].[IdentifierCodeTable] AS TABLE(
    [Id] [dbo].[Identifier] NULL,
    [Code] [dbo].[Code] NULL
)
我试图强制执行
Id
必须是
唯一的
,除了
NULL
值。 我有以下代码,它对
非NULL
值运行良好,但当我尝试插入2个
NULL
值时,它不允许我这样做

CREATE TYPE [dbo].[IdentifierCodeTable] AS TABLE(
    [Id] [dbo].[Identifier] NULL,
    [Code] [dbo].[Code] NULL,
    UNIQUE(Id)
)

是否有任何方法可以像我使用过滤器在常规索引中所做的那样,从唯一约束中排除
NULL
值?

我想这就是我需要知道的全部内容(这是SQL Server 2008,但我想它也适用于SQL Server 2012)

无法在用户定义的表类型上创建非聚集索引,除非该索引是在用户定义的表类型上创建主键或唯一约束的结果。(SQL Server通过使用索引强制执行任何唯一或主键约束。)


来源:

是否有理由使用唯一约束而不是使用唯一索引来完成此操作?不,我也可以在
UDT
字段上使用
unique
索引。问题是我在浏览网页时,找不到在
UDT
字段上创建自定义索引的方法(我只能创建
PK
或使用
UNIQUE
约束),我尝试在[dbo].[IdentifierCodeTable](Id)上创建唯一的非聚集索引[UK_IdentifierCodeTable]和SQL Server引发异常
找不到对象“dbo.IdentifierCodeTable”,因为它不存在或您没有权限。
。我想这是因为它不是表/视图。我的大脑决定那是一张桌子而不是UDT。出于好奇,您想用TableUDT实现什么?这似乎让事情变得更加困难了。我正在使用表UDT从其他存储过程中调用一个存储过程,并使用表作为参数。是的,2012年也是如此。2014允许非唯一索引,但不允许根据需要筛选索引。