【发布时间】:2020-10-10 00:56:11
【问题描述】:
我正在尝试在 2 列上添加一个唯一约束,允许多个 (null, null),但不允许多个 ("a", null)。我编写了以下 SQL 语句,但出现错误
关键字“with”附近的语法不正确
SQL语句:
CREATE UNIQUE NONCLUSTERED INDEX [UQ]
ON [dbo].[MyTable] ([Column_A], [Column_B])
WHERE [Column_A] IS NOT NULL OR [Column_B] IS NOT NULL
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY];
然而在
WHERE [Column_A] IS NOT NULL OR [Column_B] IS NOT NULL
当我用AND 替换OR 时,不再有语法错误。但我想要的是OR 逻辑,而不是AND,因为使用AND 允许多个("a", null) 条目。
那么为什么使用OR 会出现不正确的语法错误?谢谢。
【问题讨论】:
-
您可以使用所需的 Where 子句创建视图,然后在其上创建唯一索引以强制执行此操作。过滤后的索引语法只允许
<filter_predicate> ::= <conjunct> [ AND <conjunct> ] -
谢谢。我根据您的评论写了一个答案。 @马丁史密斯
标签: sql-server unique-constraint