我正在尝试对表实施检查约束,以便无法在存在记录的地方插入记录,其中两个列(“Int_1”和“Int_2”)已经具有我们正在尝试插入的值例如:
ID Name Int_1 Int_2
1 Dave 1 2
将 (2, Steve, 2, 2) 插入上表是可以的,就像 (3, Mike, 1, 3) 一样,但是不允许插入 Int_1 AND Int_2 已经存在的值,即 (4, Stuart, 1 , 2) 是非法的。
我认为这样定义我的表会起作用:
CREATE TABLE [Table](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](255) NOT NULL,
[Int_1] [int] NOT NULL,
[Int_2] [int] NOT NULL,
CONSTRAINT [chk_Stuff] CHECK (dbo.chk_Ints(Int_1, Int_2)=1))
其中: dbo.chk_Ints 定义为:
CREATE FUNCTION [dbo].[chk_Ints](@Int_1 int,@Int_2 int)
RETURNS int
AS
BEGIN
DECLARE @Result int
IF NOT EXISTS (SELECT * FROM [Table] WHERE Int_1 = @Int_1 AND Int_2 = @Int_2)
BEGIN
SET @Result = 1
END
ELSE
BEGIN
SET @Result = 0
END
RETURN @Result
END
GO
当使用上面的组合时,如果我尝试插入任何记录,SQL 会告诉我我已经破坏了我的检查约束。我可以从表中删除所有行并尝试插入第一条记录,SQL 告诉我我已经打破了我的约束,这是我不可能做到的!
我已经在互联网上搜索了很长一段时间,正在寻找 UDF 依赖于多个表列的检查约束的示例,但无济于事。关于为什么这可能不起作用的任何想法?
提前致谢 :)