我在表中插入和删除元素,因此,当我想插入一个新元素时,它需要一个新的id号,但是这个id不是最后一个id + 1。例如:最后一个id是5,我插入了5个元素并删除之后,新id将取值11,我需要6.这是我的代码
CREATE TABLE #FC
(
Code varchar(25),
Description varchar(50),
Category varchar(10),
CreatedDate datetime,
LastModifiedDate datetime
);
--Adding just one record
INSERT INTO #FC (Code, Description, Category, CreatedDate, LastModifiedDate)
VALUES ('DELETE_MEMBER', 'Delete Member', 'POLICY', @Now, @Now);
;
SET IDENTITY_INSERT [dbo].[Function_Code] ON;
MERGE
INTO [dbo].[Function_Code] AS T
USING #FC AS S
ON (T.Code = S.Code) AND (T.Description = S.Description) AND(T.Category = S.Category)
WHEN MATCHED THEN
UPDATE SET
[Code] = S.[Code]
, [Description] = S.Description
, [Category] = S.Category
, [CreatedDate] = S.CreatedDate
, [LastModifiedDate] = S.LastModifiedDate
WHEN NOT MATCHED THEN
INSERT (Code, Description, Category, CreatedDate, LastModifiedDate)
VALUES(S.Code, S.Description, S.Category, S.CreatedDate, S.LastModifiedDate)
;
SET IDENTITY_INSERT [dbo].[Function_Code] OFF;
答案 0 :(得分:2)
身份是一个您不应该自己处理的技术领域。如果您想自己管理序列,请不要使用身份字段。
尽管如此,如果你真的想这样做,你必须将表重新设置为所需的值:
DELETE YourTable
DECLARE @n INT;
SELECT @n = MAX(YourId) FROM YourTable
DBCC CHECKIDENT ('YourTable', RESEED, @n)
INSERT YourTable
答案 1 :(得分:0)
你问的是危险的。如果您将列设置为标识列,请不要触摸它,让sql server完成其工作。否则,您可以开始获取主键错误。标识列已准备好插入11.您可以通过多次运行在代码中插入6到11,并且下次身份尝试在表中插入行时可能会出现主键错误。
正如托马斯哈拉蒂克所说,你可以重新研究你的餐桌。或者您可以使用:
select MAX(YourId) + 1 FROM YourTable
如果您确定将始终插入已由标识列使用过的ID,请将其插入您的标识列。
但是,如果您通常会覆盖默认身份行为,那么最好自己管理此列,因为从标识列中删除会导致默认情况下出现间隙。