CREATE TABLE Persons
(
P_Id varchar(6) NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
PRIMARY KEY (P_Id)
)
此表中的是P_Id
的主键。我们希望在开始时使用默认值(PN00)生成P_Id
的自动增量,同时仅插入LastName和FirstName .eg:-PN001用于第一个条目,PN002用于第二个,PN003用于第三个,依此类推。
答案 0 :(得分:7)
唯一可行的解决方案是使用
ID INT IDENTITY(1,1)
列,以使SQL Server处理数值的自动增量所以试试这个:
CREATE TABLE dbo.Persons
(ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
P_ID AS 'PN' + RIGHT('00000' + CAST(ID AS VARCHAR(5)), 5) PERSISTED,
.... your other columns here....
)
现在,每次在Persons
中插入一行而未指定ID
或P_ID
的值时:
INSERT INTO dbo.Persons(Col1, Col2, ..., ColN)
VALUES (Val1, Val2, ....., ValN)
然后SQL Server将自动且安全地增加ID
值,而P_Id
将包含PN00001
,PN00002
等值。 ....等等 - 自动,安全,可靠,无重复。
答案 1 :(得分:0)
有多种方法可以解决您的问题。
这种方法不会与表的架构耦合。
有关触发器的更多信息,请参阅此链接: https://msdn.microsoft.com/en-IN/library/ms189799.aspx
在插入触发器之前,请参考此链接模拟'在SQL Server中: How to emulate a BEFORE INSERT trigger in T-SQL / SQL Server for super/subtype (Inheritence) entities?
您还可以使用过程,如:
create procedure Persons_insert(@lastname varchar(255), @firstname varchar(255))
as
begin
--write code to generate the ID as you like
insert into Persons(p_id,lastname,firstname)values(generated_id,lastname,firstname);
end