Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我在自动递增列中出错。在错误记录期间_Sql_Sql Server 2008 - Fatal编程技术网

Sql 我在自动递增列中出错。在错误记录期间

Sql 我在自动递增列中出错。在错误记录期间,sql,sql-server-2008,Sql,Sql Server 2008,在SQLServer2008中 创建表Person Person\u ID bigint identity 1,1 not null约束PersonID\u PK主键Person\u ID 当记录像12345一样正确时,它应该将id增加1个数字。填充person表上的另一列记录时出错,但下一次不应增加1,否则将丢失。123错误发生下一个id值为5,两个错误下一个id值为8,9,10,11两个错误下一个id值为13请告诉我解决方案,我如何在出错期间自动递增,它不应错过该值。在SQL Server中

在SQLServer2008中

创建表Person Person\u ID bigint identity 1,1 not null约束PersonID\u PK主键Person\u ID
当记录像12345一样正确时,它应该将id增加1个数字。填充person表上的另一列记录时出错,但下一次不应增加1,否则将丢失。123错误发生下一个id值为5,两个错误下一个id值为8,9,10,11两个错误下一个id值为13请告诉我解决方案,我如何在出错期间自动递增,它不应错过该值。

在SQL Server中,当表中有标识列时,以及当向该表插入记录时,例如,如果插入失败,由于检查约束,identity仍然会增加

如果你想防止这种情况发生。您可以尝试创建一个替代触发器。例如:


另一种选择,只是为了你的第二个选择

每次插入失败后,可以重置种子

用户按照代码进行测试,它是有效的。

INSERT INTO TestTable VALUES('test1')
INSERT INTO TestTable VALUES(NULL)
...reset seed
INSERT INTO TestTable VALUES('test2')
select * from TestTable


declare @maxid int
SELECT @maxid = MAX(id) FROM TestTable
DBCC CHECKIDENT('testtable',RESEED, @maxid ) WITH NO_INFOMSGS

INSERT INTO TestTable VALUES('test1')
INSERT INTO TestTable VALUES(NULL)
...reset seed
INSERT INTO TestTable VALUES('test2')
select * from TestTable