如何在sql中生成自动生成的序列no

时间:2014-08-07 07:30:03

标签: sql sql-server-2008

我有一个要求。我已经有一个名为WorkOrder的表。在此表中,有一列Named WorkorderId设置为主键和标识。下一个是voucherNumber。现在我想自动生成voucherNumber。条件是凭证号码不会重复。例如,首先我在表中插入2行,然后删除第2个条目。下次我的凭证号码应为3.再次我再插入3个条目然后我的凭证不应该是6.然后我删除此表中的一行,之后我的凭证编号应为7.如果我删除最后一行(我的意思是7)然后下一次凭证号码应该相同。

2 个答案:

答案 0 :(得分:3)

创建列时使用IDENTITY(...)。这将使字段自动增加其值。

如果列已经存在,则必须先删除该列。没有(干净的)方法可以在现有的列上实现这一点。

有关详细信息和示例,请查看http://www.w3schools.com/sql/sql_autoincrement.asp

编辑:抱歉,我忽略了您在PK列上使用IDENTITY(...)的信息。不幸的是,SQL-Server只能有一个列,每个表都有IDENTITY属性......所以在这种情况下你必须使用一个触发器。

这是一个例子:

CREATE TRIGGER CountRows 
ON TestCount 
AFTER UPDATE
AS 
UPDATE TestCount  SET Cnt = Cnt +1 WHERE ID IN (SELECT ID from inserted)
GO

答案 1 :(得分:0)

如果您要在记录中输入IDENTIFIER,最好使用uniqueIdentifier类型列。它是xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx形式的字符串常量,其中每个x是0-9或a-f范围内的十六进制数字。例如,6F9619FF-8B86-D011-B42D-00C04FC964FF是有效的uniqueidentifier值。

插入时,您可以按照以下步骤进行操作;

Insert into MyTable 
(WorkorderId, WorkName) values (NewId(), 'Test')

使用此功能,您可以确定Id是全局唯一的。