Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
Sql server 2005 多列约束_Sql Server 2005_Check Constraints - Fatal编程技术网

Sql server 2005 多列约束

Sql server 2005 多列约束,sql-server-2005,check-constraints,Sql Server 2005,Check Constraints,我有一个有三列的表,关系的ID,相关对象的ID和对象的值。该表可能具有相同数量的重复ID值关系,但相同ID的值为0时除外 问题是,当值为0时,我如何强制它不允许重复ID值关系?正如@Martin Smith在问题的评论中指出的,这确实类似于该问题的答案(尽管它是针对sql-08的),sql-00和05有一个示例解决方案 其思想是创建一个索引视图,用以下代码模拟过滤后的唯一索引: CREATE VIEW dbo.myTableView WITH SCHEMABINDING AS SELECT ID

我有一个有三列的表,关系的ID,相关对象的ID和对象的值。该表可能具有相同数量的重复ID值关系,但相同ID的值为0时除外


问题是,当值为0时,我如何强制它不允许重复ID值关系?

正如
@Martin Smith
在问题的评论中指出的,这确实类似于该问题的答案(尽管它是针对sql-08的),sql-00和05有一个示例解决方案

其思想是创建一个索引视图,用以下代码模拟过滤后的唯一索引:

CREATE VIEW dbo.myTableView
WITH SCHEMABINDING
AS
SELECT ID
FROM dbo.myTable
WHERE Value = 0

GO 
CREATE UNIQUE CLUSTERED  INDEX ix ON dbo.myTableView(ID)

无法使用检查约束执行此操作。使用过滤索引或具有唯一约束的视图(取决于SQL Server的版本)。@Martin是的,这正是我需要的,但我在SQL Server 05上,您需要使用索引视图技术。我的答案中有一个“可能重复”链接的例子。
CREATE VIEW dbo.myTableView
WITH SCHEMABINDING
AS
SELECT ID
FROM dbo.myTable
WHERE Value = 0

GO 
CREATE UNIQUE CLUSTERED  INDEX ix ON dbo.myTableView(ID)