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