使用函数检查约束

时间:2014-03-11 21:29:44

标签: sql-server

我花了一些时间尝试编写一个指向函数的检查约束,我发现了这篇文章:

article about check constraints using functions

我的问题是:检查约束绝对是比触发器更好的选择吗?

这里有一个例子:

CREATE TABLE tmgr.MyTable
(
id INT IDENTITY PRIMARY KEY,
NAME NVARCHAR(50),
TypeId int
)

CREATE FUNCTION dbo.fn_CheckConstraintType 
(   
    @Entity nvarchar(128),
    @TypeId int 
)
RETURNS int
AS
BEGIN
    DECLARE @ReturnValue INT = 0
    IF EXISTS (SELECT 1
             FROM dbo.TypeEntity
            WHERE Entityid = ( SELECT Entityid
                     FROM dbo.Entity
                    WHERE Name = @Entity
                     )
              AND TypeId = @TypeId)
           SET @ReturnValue = 1 
    RETURN  @ReturnValue
END

这里有检查约束

ALTER TABLE dbo.MyTable WITH NOCHECK ADD CONSTRAINT CK_MyTable_CheckConstraintType CHECK (dbo.fn_CheckConstraintType('MyTableType', [TypeId])=1)

我想确保这种方法是最好的选择,或者在使用触发器之前还有其他选择。检查约束发生在插入/更新语句之前这是使用触发器的主要区别吗?问题太多了!遗憾!

由于

0 个答案:

没有答案