如何解决为什么我的 SQL Server 约束说存在冲突?
我正在尝试使用以下脚本向 sql Server 表添加约束:
CREATE FUNCTION CheckHREmpIDrequired()
RETURNS BIT AS
BEGIN
DECLARE @ret BIT;
SET @ret = 0;
SELECT @ret = 1 WHERE EXISTS (SELECT 1 FROM GeneralSettings WHERE [Key] = 'HR_EMP_ID_required' AND TRIM(LOWER([Value])) = 'true');
RETURN @ret;
END
GO
CREATE FUNCTION CheckHREmpIDAndDomainValid(@HREmpID varchar(10),@Domain varchar(50))
RETURNS BIT AS
BEGIN
DECLARE @required BIT;
EXEC @required = dbo.CheckHREmpIDrequired;
IF ((@HREmpID IS NULL OR TRIM(@HREmpID) = '') AND @required = 1)
BEGIN
RETURN 0
END
IF (@HREmpID IS NOT NULL AND LEN(@HREmpID) > 0)
BEGIN
DECLARE @ret BIT;
SET @ret = 0;
SELECT @ret = 1 WHERE NOT EXISTS (SELECT 1 FROM Employee WHERE HREmpID = @HREmpID AND Domain = @Domain);
RETURN @ret;
END
RETURN 1
END
GO
ALTER TABLE [dbo].[Employee]
ADD CONSTRAINT [CheckUniqueHREmpIDAndDomain] CHECK (dbo.CheckHREmpIDAndDomainValid(dbo.Employee.HREmpID,dbo.Employee.Domain) = 1);
GO
约束基本上检查列 HREmpID 和 Domain 的组合是否唯一。在不需要 HREmpID 且未提供的情况下,允许重复。
在约束中调用了两个函数:CheckHREmpIDAndDomainValid 和 CheckHREmpIDrequired。 CheckHREmpIDAndDomainValid 是从约束调用的主要函数。它检查 HREmpID 和域组合是否唯一,如果需要,提供 HREmpID。 CheckHREmpIDrequired 检查是否需要 HREmpID。
然而,当我运行这个脚本时,它告诉我:
The ALTER TABLE statement conflicted with the CHECK constraint "CheckUniqueHREmpIDAndDomain". The conflict occurred in database "TBoardDB",table "dbo.Employee".
但是Employee表中的所有记录都是唯一的:
并且不需要 HREmpID。
与约束冲突的是什么?有人看到脚本有问题吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。