2011-01-13 8 views
1

可能性の重複:私は両方のヌルを持つ列がしたいSQL Serverでは
SQL Server UNIQUE constraint with duplicate NULLsは、私が唯一の非NULL値に一意のインデックスをしたい

そして本当の価値。列に値がある場合は、それが一意であることを保証したいと思います。列には、この列にnullを含む複数の行を含めることができます。さて、テーブルが良いID列、と主キーを持っているでしょう

Book Number - identity 
Title - varchar 
ISBN - char 

:たとえば

は、私は、すなわち3列、と本のテーブルを持っていたとします。質問はISBNの列にあります。私はテーブルに何度もISBN番号が表示されることを望んでいませんが、ISBN番号のない本がたくさんあります(わからないので)。

ISBNでこの制約を宣言する方法はありますか(または何が最善の方法ですか)? ISBNがNULLの場合、それが存在するときISBNで計算列、および主キーを作成し、以前のバージョンでは

CREATE UNIQUE INDEX indexName ON tableName(isbn) WHERE isbn IS NOT NULL 

SQL Server 2008では
+0

です。おそらくあなたはCHECKを使うことができますか? – leppie

+0

@astander:それ自体は他の多くのものを複製するhttp://stackoverflow.com/questions/191421/how-to-create-a-unique-index-on-a-null-columnの複製です。質問に答えてみましょうか? :) – Andomar

+0

@Andomarは、* close-> Duplicate question * –

答えて

5

は、次のようなフィルタのインデックスを作成することができます:

SQL Server UNIQUE constraint with duplicate NULLsからコピー
CREATE TABLE tableName (
    pk int identity(1,1) primary key, 
    isbn int NULL, 
    nullbuster as (case when isbn is null then pk else 0 end), 
    CONSTRAINT dupNulls_uqX UNIQUE (isbn) 
) 

、これはwikiのモード:)はありませんが行うことができます

関連する問題