-1

テーブルvoucher_masterがあります。以下の条件を満たす複合一意キーを作成したい

voucher_type    voucher_sub_type     date        Abbreviation
 INV                DOM              1/1/2000       ID            allowed
 INV                DOM              15/1/2000      ID            allowed

 INV                INT              1/1/2000       ID            not allowed
 INV                INT              15/3/2012      ID            not allowed

特定のabbreviationが作成されたvoucher_type後、との組み合わせに対してvoucher_sub_type同じabbreviationものを作成することはできません。voucher_typevoucher_sub_type

ただし、voucher_typeとvoucher_sub_typeの略語が作成されている場合は、最初に作成された同じ組み合わせの日付が異なる同じ略語を作成できます。他の組み合わせに対して同じ略語を作成することはできません。

SQLサーバーでこれを行う方法は?

4

3 に答える 3

2

要件は、テーブルを2つのテーブルに正規化する必要があることを意味していると思います。


の両方があるバウチャーAbbreviation(voucher_type, voucher_sub_type)UNIQUE

voucher_type   voucher_sub_type   Abbreviation
  INV            DOM                ID          allowed
  INV            INT                ID     not allowed (if the above row exists)

Voucher_Datesは、to
であり、またはのいずれかです。AbbreviationFOREIGN KEYVoucher(Abbreviation)
(date, Abbreviation)PRIMARYUNIQUE

 date        Abbreviation
1/1/2000       ID           
15/1/2000      ID           
于 2012-07-30T15:36:25.857 に答える
0

サーバー2008でのSQLの構文が苦手なので、疑似コードを記述します。うまくいけば、コードを記述できます。

if(date!= @ newDate where voucher_type = @ newVoucher AND voucher_SubType = @ newSubVoucher)THEN{レコードを挿入}

上記の処理は、挿入しようとしているものと同じバウチャータイプの日付が存在するかどうかを比較し、存在しない場合はレコードを入力できるようにすることです。おそらく改善の余地はたくさんありますが、誰かがあなたを助けるために編集して追加できることを願っています。

于 2012-07-30T12:57:56.703 に答える
-1

皆さんありがとう、

ストアドプロシージャの問題を解決し、挿入および更新中に必要な条件を確認しました

于 2012-07-31T07:08:20.523 に答える