多个标识列或自动增加的方法
本文关键字:增加 方法 标识 | 更新日期: 2023-09-27 18:07:33
我有一个表(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属于同一组,而订单id 3和4属于自己的组。
许多订单可以有相同的groupID
,但是当我插入一个新组的订单时,我希望groupID
自动使用下一个序列号自动填充,同时允许我为不同的订单插入重复的groupID
,如果我需要的话。
希望这有意义。
我该怎么做呢?(我使用c#在后端,如果有任何区别)
我将创建一个具有标识的新"groups"表,以确保唯一性,如下所示:
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示例演示了填充表的一种方法。
一种选择是在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 Fiddle Demo
使用INSERTED
检查插入的记录是否有NULL
groupid,如果有,则将表更新为MAX(groupid) + 1
,使用COALESCE
检查NULL
。