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 SQLServer2005数据库中的复杂查询_Sql Server 2005_Constraints - Fatal编程技术网

Sql server 2005 SQLServer2005数据库中的复杂查询

Sql server 2005 SQLServer2005数据库中的复杂查询,sql-server-2005,constraints,Sql Server 2005,Constraints,我的数据库中有一个表,其中的记录在概念上可以是其他RCORD的子项。该表有一个非空的名称字段。我需要确保一组子项中的每个名称都是唯一的,但不能跨整个数据库。我想在数据库中使用一个约束来实现这一点。实现这一目标的最佳方式是什么? 我知道在这个过程中的某个时候,我必须进行如下查询: @NameParameter NVARCHAR(512) Select Name from MyTable WHERE Name=@NameParameter 问题是我应该把这个查询放在哪里?乍一看,我认为这应该是一个

我的数据库中有一个表,其中的记录在概念上可以是其他RCORD的子项。该表有一个非空的名称字段。我需要确保一组子项中的每个名称都是唯一的,但不能跨整个数据库。我想在数据库中使用一个约束来实现这一点。实现这一目标的最佳方式是什么? 我知道在这个过程中的某个时候,我必须进行如下查询:

@NameParameter NVARCHAR(512)
Select Name from MyTable
WHERE Name=@NameParameter

问题是我应该把这个查询放在哪里?

乍一看,我认为这应该是一个“而不是触发器”。这提供了一个很好的例子。

我可能没有正确理解您的问题,但我的建议是创建另一个列来引用孩子的父记录。然后,您可以基于这两列创建多列索引,以加速在where子句中同时引用这些列的任何查询。。。因此,您的唯一性将来自{parent_name,child_name}。这两列上的约束将充当该表的键,并且不允许重复

@childname NVARCHAR(255), @parentname NVARCHAR(255)
SELECT * FROM [child_records] 
WHERE [parent_name] = @parentname 
AND [child_name] = @childname