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