SQL Server:插入下一个可用的int
发布时间:2020-12-12 08:51:21 所属栏目:MsSql教程 来源:网络整理
导读:我正在处理SQL Server中有一个serial_no列的表,该列被定义为非null int.它似乎不是一个自动递增字段,就像我从插入语句中删除该列一样,我得到一个错误,说明serial_no字段不能为空. 那么如何插入下一个可用的号码? 我试过这个: INSERT INTO mytable (serial_n
我正在处理SQL Server中有一个serial_no列的表,该列被定义为非null int.它似乎不是一个自动递增字段,就像我从插入语句中删除该列一样,我得到一个错误,说明serial_no字段不能为空.
那么如何插入下一个可用的号码? 我试过这个: INSERT INTO mytable (serial_no) VALUES ( (SELECT MAX(serial_no)+1 FROM mytable)) 但我得到一个错误,说子查询不能在这种情况下使用. 编辑:此表用于现成的产品,因此我无法更改设计并使serial_no列成为自动增量. 解决方法您可以使用锁定提示来改进写入并发性INSERT INTO mytable (serial_no,value) SELECT MAX (serial_no)+1,@value FROM mytable WITH (ROWLOCK,XLOCK,HOLDLOCK) 如果性能不重要,请尝试使用TABLOCKX代替ROWLOCK,XLOCK 但是,如果这不安全,您需要重试 DECLARE @retry bit SET @retry = 1 WHILE @Retry = 1 BEGIN BEGIN TRY INSERT INTO mytable (serial_no,value) SELECT MAX (serial_no)+1,@value FROM mytable WITH (ROWLOCK,HOLDLOCK) SET @Retry = 0 END TRY BEGIN CATCH IF ERROR_NUMBER() <> 2627 --PK violation RAISERROR ('blah',16,1) END CATCH END 或者更改为IDENTITY列并正确执行… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |