>我有一个包含 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。