【问题标题】:UNIQUE NONCLUSTERED with WHERE clause in TABLE CREATE?TABLE CREATE 中带有 WHERE 子句的 UNIQUE NONCLUSTERED?
【发布时间】:2014-08-11 13:12:03
【问题描述】:
我知道可以使用WHERE 子句为现有表中的字段创建UNIQUE 约束,但是否可以在CREATE TABLE 语句中创建它们?即类似的东西(我知道这是无效的语法):
CREATE TABLE [ExampleTable]
(
[ID] INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
[Name] NVARCHAR(20) DEFAULT '' NOT NULL UNIQUE NONCLUSTERED WHERE [Name] <> ''
)
这里的目的是 [Name] 字段必须是唯一的,除非它是一个空白字符串。
【问题讨论】:
标签:
sql-server-2008-r2
where-clause
unique-constraint
create-table
【解决方案1】:
不,你不能。
您可以创建过滤索引但不能创建过滤约束,语法不允许这样做。
[ CONSTRAINT constraint_name ]
{
[ NULL | NOT NULL ]
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR =fillfactor ]
[ WITH ( index_option [, ...n ] ) ]
[ ON { partition_scheme_name (partition_column_name)
| filegroup | "default" } ]
| [ FOREIGN KEY ]
REFERENCES [ schema_name . ] referenced_table_name
[ ( ref_column ) ]
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ]
| CHECK [ NOT FOR REPLICATION ] ( logical_expression )
}