SQL Server:插入下一个可用的int

前端之家收集整理的这篇文章主要介绍了SQL Server:插入下一个可用的int前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在处理sql Server中有一个serial_no列的表,该列被定义为非null int.它似乎不是一个自动递增字段,就像我从插入语句中删除该列一样,我得到一个错误,说明serial_no字段不能为空.

那么如何插入下一个可用的号码?

我试过这个:

  1. INSERT INTO mytable (serial_no) VALUES ( (SELECT MAX(serial_no)+1 FROM mytable))

但我得到一个错误,说子查询不能在这种情况下使用.

编辑:此表用于现成的产品,因此我无法更改设计并使serial_no列成为自动增量.

解决方法

您可以使用锁定提示来改进写入并发性
  1. INSERT INTO mytable (serial_no,value)
  2. SELECT MAX (serial_no)+1,@value
  3. FROM mytable WITH (ROWLOCK,XLOCK,HOLDLOCK)

如果性能不重要,请尝试使用TABLOCKX代替ROWLOCK,XLOCK

但是,如果这不安全,您需要重试

  1. DECLARE @retry bit
  2. SET @retry = 1
  3.  
  4. WHILE @Retry = 1
  5. BEGIN
  6. BEGIN TRY
  7. INSERT INTO mytable (serial_no,value)
  8. SELECT MAX (serial_no)+1,@value
  9. FROM mytable WITH (ROWLOCK,HOLDLOCK)
  10.  
  11. SET @Retry = 0
  12. END TRY
  13. BEGIN CATCH
  14. IF ERROR_NUMBER() <> 2627 --PK violation
  15. RAISERROR ('blah',16,1)
  16. END CATCH
  17. END

或者更改为IDENTITY列并正确执行…

猜你在找的MsSQL相关文章