0

次のようなテーブルをデザインしたいと思います。

avaya nchar(6) NOT NULL,
startDate datetime NOT NULL,
endDate datetime NOT NULL,
sup_assigned nvarchar(255) NOT NULL,
myID int NOT NULL IDENTITY (1, 1)

しかし、、、、およびがすべてのレコードで同じであるか、、、、およびがすべてのレコードで同じである挿入avaya/更新を停止するためにテーブルを作成したいと思います。startDatesup_assignedavayaendDatesup_assigned

これを行うにはどうすればよいですか?

を含む3つの列のセットをstartDate16進数に変換してから、それらを追加して列を作成することを考えました。これは、とKey1を含む他の3つの列と同じことです。次に、複合キーとして設定します。endDateKey2Key1Key2

しかし、私はこのエラーを受け取ります:

  • テーブルを作成できません。
    このコンテキストでは、ユーザー定義の関数名の前にデータベース名を付けることはできません。

MS SQL 2005を使用してこれを行うにはどうすればよいですか?

4

1 に答える 1

5

より良い方法は、これらの派生フィールドを作成してテーブルを非正規化するのではなく、フィールド自体に2つの一意のキーを使用することです。

UNIQUE KEY key_a (avaya, startDate, sup_assigned)
UNIQUE KEY key_b (avaya, endDate, sup_assigned)

これにより、これらの3方向のグループ化のいずれかがDB内の他のレコードと同一である場合に、レコードが挿入されるのを防ぐことができます。

于 2011-11-18T21:08:41.853 に答える