如何使用 sql 查询为 2 个以上的列设置唯一性



>我有一个包含 4 列的表,其中一列需要位于一组数据中,其他 3 列需要在整个表中是唯一的。下面是一个示例

表名 : tbl员工

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

我需要检查管理器 ID 是否在主表中,并且使用单个 sql 查询在整个表中,员工名称、员工类型、加入日期是唯一的。我尝试过子查询,分区和事件函数,但发现很难。

我现在正在使用 sql 服务器 2008

如果我答对了您的问题,您可以为三列使用唯一的索引:

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

这是你真正想要的吗?

您可以使用调用 UDF 的 CHECK 约束来执行此操作。

编写一个函数,如果

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

最新更新