【发布时间】:2018-07-27 12:55:51
【问题描述】:
我在 Visual Studio 中使用数据库项目,我希望在创建表时使用 where 子句创建唯一索引,而不必创建表并添加另一个脚本以将约束添加到索引。我的约束是
CREATE UNIQUE NONCLUSTERED INDEX ix_IdNotNull
ON MyTable(MyId)
WHERE MyId IS NOT NULL;
我正在寻找类似的东西
create table MyTable
(
MyId int unique where MyId is not null
)
但 SSMS 不喜欢这样。是否可以在创建表时将 where 子句分配给唯一约束?
【问题讨论】:
-
在 SQL Server 2012 中,没有。在以后的版本中,是的。 SQL Server 2017 至少接受
CREATE TABLE MyTable(MyId INT NULL, INDEX ix_IdNotNull UNIQUE(MyId) WHERE MyId IS NOT NULL)。对于 2012 年,我认为单独使用CREATE INDEX是不可避免的(请注意,它是一个索引,而不是一个约束——UNIQUE约束不能被过滤)。 -
@JeroenMostert 我担心是这样。感谢您的快速回复。
-
没有什么损失——在空表上创建索引是即时的,如果你有理由可以将
CREATEs 包装在一个事务中担心表在没有索引的情况下存在的非常小的时间。 -
如果我没有在 VS 中使用数据库项目,那么我根本不会担心它,我想只要在底部添加几行来创建它表所在的脚本,这没什么大不了的。但是在 IME 和数据库项目中,当您在其中执行不常见的操作时,它们就会开始变得不稳定。
标签: sql-server tsql