2016-10-26 4 views
0

列の制約を作成したいが、データの一部のみを作成したい。列の制約を作成するには、データの一部のみを作成します。

状況は次のとおりです.1つの表にすべてのドロップダウンの値があります。それらを分離するために、我々はdropdowntypeと呼ばれる弁別器を有する。

今、制約を作成したいと思いますが、dropdowntypeを考慮する必要があります。

制約条件は次のとおりです。dropdownsにはデフォルト値を設定できます。 dropdowntypeごとに0または1つのレコードのみが許可され、isdefaultの値はtrueです。

isdefaultの値がtrueの複数のレコードが存在する可能性がありますが、すべてがdropdowntypeの異なる値である必要があります。

編集:与えられたdropdowntypeの値には複数の値があり、値はfalseです。

これは可能ですか?

(さらに、別のnullable列に制約を設定したい、その列のすべての値がヌルであるか、ある特定のdropdowntypeの値を持つことが必要です。私はこの1つを自分で行う方法を見つけ出すだろう、答え)

表:。

CREATE TABLE [dbo].[DropDownValues](

    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar](100) NOT NULL, 
    [CreateDate] [datetime] NOT NULL, 
    [IsActive] [bit] NOT NULL, 
    [IsDefaultValue] [bit] NOT NULL, 
    [Description] [nvarchar](1000) NULL, 
    [IsOtherItem] [bit] NOT NULL, 
    [Dropdowntype] [tinyint] NOT NULL, 
CONSTRAINT [PK_ddv] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
+1

おそらく、フィルタリングされた一意のインデックス: 'DropDownValues(dropdowntype)に一意のインデックスを作成する場所はIsDefaultValue = true' –

+0

問題はまだ解決されていませんか? –

+0

@TT。私はそれに取り組んでいます。コメントのコードには望みの結果がないと思って質問を編集しました。私はそれが動作すると思うが、私はMS Sqlのドキュメントは、この作品はなぜ理解するために見つけることができない... – Michel

答えて

2

質問1に答えるために、あなたはdropdowntypeisdefaultの化合物のユニークなキーをしたいです。擬似コード:

CREATE UNIQUE NONCLUSTERED INDEX idx_yourcolumn_notnull 
ON YourTable(dropdowntype, isdefault) 
WHERE isdefault IS NOT NULL; 

質問の2番目の部分についても同じことができます。それらのキーはです。isDefault IS NOT NULLです.thsを使用すると、NULL可能な列に対して一意の制約を作成できます。

+0

ありがとう、これは動作します。文法を頭に浮かべるにはしばらく時間がかかりました。 – Michel

関連する問題