我有一个表(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共享同一个组,而3和4组合在一起。
许多订单可以有相同的groupID
,但是当我插入新组的订单时,我希望groupID
自动填充下一个序列号,同时如果需要,允许我为不同的订单插入重复的groupID
。
希望这是有道理的。
我该怎么做呢? (我在后端使用c#,如果这有任何区别的话)
答案 0 :(得分: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 Example演示了一种填充表格的方法。
答案 1 :(得分: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;
这将检查插入的记录是否具有使用NULL
的{{1}} groupid,如果是,则使用INSERTED
将表更新为MAX(groupid) + 1
以检查{{ 1}}。