我想在服务器2005的表中添加Check Constraint
,但无法解决问题。
MemberId ClubId MeetingId
1 100 10
2 100 10
3 100 10
7 101 10 <-This would throw a check constraint
1 100 11
2 100 11
对于单个ClubId
,我不希望有多个MeetingId
基本上ClubId
只能属于一个MeetingId
,但可以分配多个成员。
我如何实现这一目标?
答案 0 :(得分:4)
在Check Constraint中使用函数是一个选项,但您可以创建一个INDEXED VIEW来完成相同的限制。
CREATE VIEW VIEW_UNIQUE_MEETINGID WITH SCHEMABINDING AS
SELECT ClubID
, MeetingID
, COUNT_BIG(*)
FROM YourTable
GROUP BY
ClubID
, MeetingID
GO
CREATE UNIQUE CLUSTERED INDEX UIX_VIEW_UNIQUE_MEETINGID ON VIEW_UNIQUE_CLUBID (MeetingID)
答案 1 :(得分:2)
从msdn
推断编辑:尝试了代码并在@rippos评论
之后修复了它CREATE FUNCTION CheckFnctn()
RETURNS int
AS
BEGIN
DECLARE @retval int
SELECT @retval = (select max(cnt) from (select COUNT(distinct ClubID) cnt FROM CheckTbl group by MeetingId) as t )
RETURN @retval
END;
GO
ALTER TABLE CheckTbl ADD CONSTRAINT chkRowCount CHECK (dbo.CheckFnctn() <= 1 );
GO