假设你有一个主表,有一些数据
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 capatilities定义一些无效组合?想象一下,你不希望允许将detailKind A和C的细节组合到同一个Master
答案 0 :(得分:1)
如果您不想使用触发器,可以尝试克服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)