Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Alter table根据与where子句SQL SERVER的组合添加唯一索引_Sql_Sql Server - Fatal编程技术网

Alter table根据与where子句SQL SERVER的组合添加唯一索引

Alter table根据与where子句SQL SERVER的组合添加唯一索引,sql,sql-server,Sql,Sql Server,我有一个包含以下列的表 ID int IDENTITY(1, 1) NOT NULL, Default bit NOT NULL, [Status] varchar (20) --possible values 'Open','Deleted'& 'Suspended' 我需要一个alter table脚本来限制只有一行的状态为'Open',默认值为1 我试过这个 ALTER

我有一个包含以下列的表

   ID         int               IDENTITY(1, 1) NOT NULL,
   Default    bit               NOT NULL,
   [Status]   varchar (20)      --possible values 'Open','Deleted'& 'Suspended'
我需要一个alter table脚本来限制只有一行的状态为'Open',默认值为1

我试过这个

ALTER TABLE [TABLE1]
ADD UNIQUE INDEX UK_TABLE1 
ON TABLE1(Default,[Status])
WHERE [Default]= 1 AND [Status] = 'Open'
它不起作用,下面是异常

Incorrect syntax near 'INDEX'. If this is intended as a part of a table hint, A WITH keyword and parenthesis are now required. See SQL Server Books Online for proper syntax.

有人能帮上忙吗?也有可能使用触发器吗?

您应该使用create而不是alter:

CREATE UNIQUE INDEX UK_TABLE1 
ON TABLE1([Default],[Status])
WHERE [Default]= 1 AND [Status] = 'Open'

只需删除alter table并用create替换add

你说的不工作是什么意思?@Felix Pamittan。。问题已更新..提到异常也已尝试..获取错误..消息156,级别15,状态1,第2行关键字“创建”附近的语法不正确。您能说出MS SQL Server的版本吗?Microsoft SQL Server 2008(SP4)-10.0.6241.0(X64)2015年4月17日10:56:08版权所有(c)1988-2008 Microsoft Corporation Enterprise Edition(64位)在Windows NT 6.1(Build 7600:)(VM)上,我使用相同版本的MS SQL Server和相同的脚本,它可以正常工作。您需要删除并创建索引,在这种情况下,alter table不起作用。为什么要在创建新索引时更改表?我已经创建了这个没有唯一索引的表。因此,我想添加新的唯一索引
create unique index UK_TABLE1 
ON TABLE1(default,status)
WHERE default= 1 AND status = 'Open'
create unique index UK_TABLE1 
ON TABLE1(default,status)
WHERE default= 1 AND status = 'Open'