2

我想将 a 添加Check Constraint到服务器 2005 的表中,但无法解决。

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,但可以分配多个成员。

我如何实现这一目标?

4

2 回答 2

4

在检查约束中使用函数是一种选择,但您可以创建完成相同限制的索引视图。

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)
于 2011-01-04T13:42:44.593 回答
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
于 2011-01-04T11:48:38.737 回答