0

tOrderSQL Server 2008 に次の構造を持つテーブル ( ) があります。

orderID (int) - this is currently the primary key and the identity field.
name(varchar)
address(varchar)
groupID (int) - now this field i need to also auto increment, but at the same time i want to be able to insert values into.

私のデータは次のようになります。

1 - john - address1 - 1
2 - mary - address2 - 1
3 - mary -address3 - 2
4 - jane - address4 - 3

オーダー ID 1 と 2 は同じグループを共有していますが、3 と 4 は独自のグループです。

多くの注文は同じものを持つことができますがgroupID、新しいグループの注文を挿入するときにgroupID、次のシーケンス番号が自動的に入力されるようにしたいと同時に、groupID必要に応じて異なる注文の重複を挿入できるようにします。

これが理にかなっていることを願っています。

どうすればこれを行うことができますか?(違いがあれば、バックエンドでc#を使用しています)

4

2 に答える 2

2

次のように、一意性を確保するために、ID を持つ新しい「グループ」テーブルを作成します。

create table tOrders(
    orderID int PRIMARY KEY IDENTITY,
    name varchar(30),
    address varchar(60),
    fkGroup int
);
create table tGroups(
    groupID int PRIMARY KEY IDENTITY,
    description varchar(50)
);

ALTER TABLE tOrders 
ADD FOREIGN KEY (fkGroup) REFERENCES tGroups(groupID);

もちろん、新しく挿入された tGroup (groupID) 値の IDENTITY に groupID を指定する必要があります。

このSQL Fiddle Exampleは、テーブルにデータを入力する 1 つの方法を示しています。

于 2013-04-05T00:36:49.870 に答える
0

1 つのオプションは、torder テーブルにトリガーを作成することです (トリガーのファンではありませんが、基準を考えると、別のオプションは考えられません)。

CREATE TRIGGER tOrder_trigger
   ON  tOrder
   AFTER INSERT
AS 
   UPDATE tOrder
   SET groupid = (SELECT COALESCE(MAX(groupid),0) + 1 FROM tOrder)
   FROM INSERTED AS I
   WHERE I.groupid IS NULL
   AND tOrder.orderid = I.orderid;

SQL フィドルのデモ

これは、挿入されたレコードがNULLを使用して groupid を持っているかどうかをチェックし、そうである場合は、 を使用して をチェックしINSERTEDて、テーブルを に更新します。MAX(groupid) + 1COALESCENULL

于 2013-04-05T00:16:05.867 に答える