A
列に同じ値の行がすでに存在し、B
の値が異なる場合、挿入/更新を拒否する制約が必要です。TSQLは、同じ列Aを持ち、異なる列Bの値を持つ行は存在しないように制約しますか?
だから:
Insert TableName(A, B) Values(x, y)
Insert TableName(A, B) Values(x, y)
Insert TableName(A, B) Values(x, z)
は、Y =/= zと第 inserに失敗します。あるいは、テーブルに既に行(x、w)があった場合は、最初の挿入時にも。
一方、これらのインサートが有効です。
Insert TableName(A, B) Values(c, y)
Insert TableName(A, B) Values(d, y)
最終発言。データは正規化されません。ノーマライズされていないフォームは、バグではなく機能です。だから私は拘束を求めている。
SQL Server 2008 R2。
あなたは(@Damien_The_Unbelieverのコメントに基づいて修正して)INSTEAD OFトリガーを使用することができます
あなたの制約の背後にあるロジックを実際には得られません。なぜ最初の部分が失敗し、2番目の部分が合格するはずですか? – Rahul