0

tOrder在 SQL 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 共享同一个 group ,而 3 和 4 属于他们自己的。

许多订单可以有相同groupID的,但是当我插入一个新组的订单时,我希望groupID自动填充下一个序列号,同时允许我在groupID需要时为不同的订单插入重复的订单。

希望这是有道理的。

我该怎么做呢?(我在后端使用 c#,如果这有什么不同的话)

4

2 回答 2

2

我将创建一个具有标识的新“组”表以确保唯一性,如下所示:

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 示例演示了一种填充表的方法。

于 2013-04-05T00:36:49.870 回答
0

一种选择是在您的 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) + 1,使用COALESCE来检查NULL

于 2013-04-05T00:16:05.867 回答