2011-12-05 13 views
2

データベーステーブルにビジネスルールを適用して、テーブルに特定の条件を満たす行がすでに含まれている場合に行を挿入できないようにしたいとします。SQL Serverの制約のチェック - 他の行のクエリ

CHECK制約を使用したいと思っていましたが、これはトリガーを介して行う必要があると思われます。

CHECK制約によってこれを行う方法はありますか?または、トリガーを使用せずにデータベースレベルでこれを行う別の方法はありますか?

+0

特に**あなたがやろうとしているもの**の例を提供してください。これを宣言的に試してみるのが最善です。 –

+0

あなたがテストしている基準についてもっと具体的にすることはできますか? –

+0

特定の範囲内にid列を持つ既存の行がある場合は、行を挿入したくない – AJM

答えて

2

(あなたがまだ共有されていない)、あなたの特定の条件に応じて、これは、関数や他の回避策よりも、通常は高速であるunique filtered index.

を行うことができるかもしれません。

一般的なフォーマットは次のようになります。

CREATE UNIQUE NONCLUSTERED INDEX ix_IndexName ON MyTable (FieldstoIndex) 
WHERE <filter to only include certain rows> 
+0

ありがとうございます。私はこれが私のニーズを満たすだろうと思う。ユーザーIDとステータスIDを持っていて、特定のステータスIDを持つユーザーに対して1つの行のみが存在するようにしたい。 – AJM

+0

一意の非同期インデックスを作成します。ix_IndexName MyTable(UserId、StatusId)にあります。StatusId = X – AJM

+0

@AJMこれはうまくいきます。 – JNK

関連する問題