gpt4 book ai didi

SQL Server : insert next available int

转载 作者:行者123 更新时间:2023-12-02 18:24:46 25 4
gpt4 key购买 nike

我正在处理 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, XLOCK, HOLDLOCK)

SET @Retry = 0
END TRY
BEGIN CATCH
IF ERROR_NUMBER() <> 2627 --PK violation
RAISERROR ('blah', 16, 1)
END CATCH
END

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

关于SQL Server : insert next available int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4853361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com