CREATE TYPE [dbo].[MyTableType] AS TABLE
(
Id INT NULL INDEX ix UNIQUE WHERE Id IS NOT NULL /*Unique ignoring nulls*/
, Sort INT NOT NULL
, [Name] NVARCHAR(MAX) NULL
)
在SQL Server 2016中执行此操作的新方法是什么?我一直遇到以下错误
' INDEX'附近的语法不正确。如果这是作为表提示的一部分,则现在需要WITH关键字和括号。有关正确的语法,请参阅SQL Server联机丛书。
答案 0 :(得分:2)
无法在用户定义的表类型上创建非聚簇索引,除非索引是在用户定义的表类型上创建PRIMARY KEY或UNIQUE约束的结果。 (SQL Server通过使用索引强制执行任何UNIQUE或PRIMARY KEY约束。)
我认为创建表类型的唯一索引的唯一方法是:
CREATE TYPE [dbo].[MyTableType] AS TABLE
(
Id INT NULL UNIQUE
, Sort INT NOT NULL
, [Name] NVARCHAR(MAX) NULL
)
我认为你不能添加类似于:
的Ignore NULLS选项CREATE UNIQUE NONCLUSTERED INDEX idx_yourcolumn_notnull
ON YourTable(yourcolumn)
WHERE yourcolumn IS NOT NULL;
答案 1 :(得分:1)
这有点复杂,但是如果你愿意添加另一列,那么你可以这样做:
id
这假设MyTableTypeId
始终为正。
由于--prod
是标识列,因此您无需插入标识列。您可以在插入时指定所需的列。