1

SQL Serverに次のテーブルがあります

  Create Table Banners
    (
    BannerID int Identity(1,1),
    BannerUrl nvarchar(500),
    BannerIsDomestic bit,
    BannerName nvarchar(50),
    CreationDate datetime,
    ModificationDate datetime,
    Show_Status bit,
    Remark nvarchar(500)
    Constraint Banner_ID_PK Primary Key (BannerID)
    )

これで、一度に 2 つの行のみShow_Status が true になる必要があるなどのカスタマイズ制約を適用したいと考えています。1BannerIsDomestic = trueつと 1 つBannerIsDomestic = false

BannerIsDomestic = true1 つだけを持つことができるすべての行に対して、Show_Status = True他のすべては false でなければなりません。

そして、BannerIsDomestic = false1 つだけを持つことができるすべての行についてShow_Status = True、他のすべては false でなければなりません。

これを SQL Server で実行できますか?

4

1 に答える 1

1

要件を正しく理解している場合、これはフィルター処理されたインデックスで達成できるはずです。

CREATE TABLE Banners
    (
    BannerID int Identity(1,1),
    BannerUrl nvarchar(500),
    BannerIsDomestic bit,
    BannerName nvarchar(50),
    CreationDate datetime,
    ModificationDate datetime,
    Show_Status bit,
    Remark nvarchar(500)
    Constraint Banner_ID_PK Primary Key (BannerID)
    )

CREATE UNIQUE NONCLUSTERED INDEX IX_Banners_IsDomesticTrue 
ON Banners (BannerIsDomestic) WHERE Show_Status = 1 

INSERT Banners (BannerIsDomestic, BannerName, Show_Status) 
VALUES (1, 'DomesticBannerShow', 1), (1, 'DomesticBannerHide', 0), 
(0, 'ItnlBannerShow', 1), (0, 'IntlBannerHide', 0) 

-- This will fail
INSERT Banners (BannerIsDomestic, BannerName, Show_Status) 
VALUES (1, 'DomesticBanner2', 1)

-- This will fail
INSERT Banners (BannerIsDomestic, BannerName, Show_Status)  
VALUES (0, 'IntlBanners2', 1) 
于 2012-12-18T07:41:39.440 に答える