我花了一些时间尝试编写一个指向函数的检查约束,我发现了这篇文章:
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)
我想确保这种方法是最好的选择,或者在使用触发器之前还有其他选择。检查约束发生在插入/更新语句之前这是使用触发器的主要区别吗?问题太多了!遗憾!
由于