2

サーバー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  

1つのメンバーに複数のメンバーを割り当てたくない 基本的に、aClubIdは1つのメンバーにのみ属することができますが、複数のメンバーを割り当てることができます。MeetingIdClubIdMeetingId

どうすればこれを達成できますか?

4

2 に答える 2

4

チェック制約で関数を使用することは1つのオプションですが、同じ制限を実現するINDEXEDVIEWを作成することもできます。

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 に答える