对每一行执行检查约束的所有情况

时间:2019-07-03 16:04:12

标签: sql-server

创建检查约束时,它将在表的所有行上执行。在其他情况下也会发生这种情况吗?

我的检查约束调用了一个内部带有SQL的函数。在大桌子上,这非常慢。

CREATE FUNCTION CheckUnique(@test NVARCHAR(20))
RETURNS INT
AS
BEGIN
    IF EXISTS (SELECT 1 FROM mytable WHERE unique_field = @test)
    BEGIN
        RETURN 1
    END
    RETURN 0
END

ALTER TABLE mytable
    ADD CONSTRAINT CCheckUnique CHECK([dbo].CheckUnique(unique_field) = 0)

1 个答案:

答案 0 :(得分:2)

不要使用函数检查值是否唯一,请使用pd.DataFrame(fruit.split())

UNIQUE INDEX

或者,或者,(今天结束了,我完全忘了邀请他们)使用CREATE UNIQUE INDEX uq_unique_field ON dbo.mytable(unique_field); ,@ Marc_s在上面的评论中提醒我:

UNIQUE CONSTRAINT

已知标量函数(尤其是那些引用表的函数)的性能非常差。如果可以,应使用内联表值函数;但是您不能为ALTER TABLE MyTAble ADD CONSTRAINT UC_unique_field UNIQUE (unique_field); 实现这些功能。不过,这里都不需要。