检查两列的约束

时间:2011-01-04 11:31:31

标签: sql sql-server check-constraints

我想在服务器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,但可以分配多个成员。

我如何实现这一目标?

2 个答案:

答案 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