如何使用sql查询设置超过2列的唯一性?

时间:2016-02-01 14:13:29

标签: sql sql-server database

我有一个包含4列的表,其中一列需要在一组数据中,另外三列需要在整个表中是唯一的。以下是一个例子

表名:tblEmployee

EmployeeId  EmployeeName EmployeeType DateOfJoining ManagerId
     1       John           Dev         1 feb 2016     12
     2       Steve          Tester      1 feb 2015     8
     3       Bob            Admin       1 jan 2016     5

我需要检查managerid是否在主表中,并且EmployeeName,EmployeeType,DateOfJoining在整个表中使用单个sql查询是唯一的。我已经尝试过子查询,分区和事件函数,但发现它很困难。

我现在正在使用sql server 2008

2 个答案:

答案 0 :(得分:0)

如果我正确地提出了您的问题,您可以为这三列使用唯一索引:

CREATE UNIQUE NONCLUSTERED INDEX [IX_tblEmployee] ON [dbo].[tblEmployee] (
    [EmployeeName], 
    [EmployeeType], 
    [DateOfJoining]) 
    WITH (
          STATISTICS_NORECOMPUTE = OFF,
          IGNORE_DUP_KEY = OFF, 
          ALLOW_ROW_LOCKS = ON, 
          ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

然后,您可以添加外键以检查ManagerId列是否包含表tblManager中的有效值:

ALTER TABLE dbo.tblEmployee ADD CONSTRAINT
       FK_tblEmployee_tblManager FOREIGN KEY (ManagerId) 
       REFERENCES dbo.tblManager (ManagerId) 
       ON UPDATE  NO ACTION 
       ON DELETE  NO ACTION

那是你真正想要的吗?

答案 1 :(得分:0)

您可以使用调用UDF的CHECK CONSTRAINT执行此操作。

编写一个函数,如果记录满足所有要求,则返回1,否则返回0,然后添加一个检查约束,检查函数的结果是否为1。