4

すべての行で 1 つの値のみが 1 で、他のすべての値が 0 であることを保証する制約を列に作成する必要があります。

トリガーを使用したソリューションは存在しますが、何かを組み込みたいと思います。

そのようなことはまったく可能ですか?

4

1 に答える 1

9

編集

実際、あなたが SQL Server 2008 を使用していることに気付きました。これには、フィルター選択されたインデックスを使用できます。

CREATE UNIQUE NONCLUSTERED INDEX UIX ON YourTable (col) where col = 1

元の回答

おそらく最も簡単な方法は、この 1 つの特別な pk を別の 1 行のテーブルに格納することです。チェック制約を使用して適用できる行のアスペクトは 1 つだけです。

CREATE TABLE OneRowTable
(
lock CHAR(1) DEFAULT 'X' NOT NULL PRIMARY KEY CHECK (lock = 'X'),
OtherTablePK int
);

それ以外の場合、正の整数で構成される id フィールドがあると仮定すると、次の定義で計算列を追加できます

case when col=1 then -1 else id end

それに一意の制約を追加します。

于 2010-09-27T14:19:33.507 に答える