假设你有一个主表,其中有一些数据
MasterId MasterData
-------- ----------
1 data1
2 data2
3 data3
以及引用母版的详细表
DetailId DetailMasterId DetailKind DetailData
-------- -------------- ---------- ----------
1 1 A detailData1
2 1 B detailData2
3 2 C detailData3
4 1 C detailData4
有没有办法根据 SQL-Server 功能来定义一些无效组合?想象一下,您不希望允许同一个 Master 中的详细类型 A 和 C 的详细组合。我想防止这些在 SQL 级别发生。
我可以使用触发器,但我不想这样做。
如果你不想使用触发器,可以尝试克服
CHECK
约束的限制:
CREATE FUNCTION ExistsDetailKind(
@MasterID INT, @DetailKind VARCHAR(10)
)
RETURNS bit
AS
BEGIN
IF EXISTS (-- <Put your logic here>)
return 1
return 0
END
ALTER TABLE detail
WITH CHECK ADD CONSTRAINT CK_DetailTypes
CHECK (ExistsDetailKind(DetailMasterId, DetailKind) = 0)