gpt4 book ai didi

sql - 是否可以通过简单的 SQL INSERT 来实现手动增量?

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

我有一个主键,我不想自动递增(出于各种原因),因此我正在寻找一种在插入时简单地递增该字段的方法。简单来说,我的意思是没有存储过程,也没有触发器,所以只是一系列 SQL 命令(最好是一个命令)。

这是我迄今为止尝试过的:

BEGIN TRAN

INSERT INTO Table1(id, data_field)
VALUES ( (SELECT (MAX(id) + 1) FROM Table1), '[blob of data]');

COMMIT TRAN;

* Data abstracted to use generic names and identifiers

但是,执行时,命令出错,提示

"Subqueries are not allowed in this context. only scalar expressions are allowed"

那么,我该怎么做/我做错了什么?

<小时/>

编辑:由于有人指出这是一个考虑因素,因此保证要插入的表至少已经有 1 行。

最佳答案

你知道会发生碰撞吗?

你需要做这样的事情,这可能会导致死锁,所以要非常确定你想在这里完成什么

DECLARE @id int
BEGIN TRAN

SELECT @id = MAX(id) + 1 FROM Table1 WITH (UPDLOCK, HOLDLOCK)
INSERT INTO Table1(id, data_field)
VALUES (@id ,'[blob of data]')
COMMIT TRAN

为了解释碰撞问题,我提供了一些代码

首先创建此表并插入一行

CREATE TABLE Table1(id int primary key not null, data_field char(100))
GO
Insert Table1 values(1,'[blob of data]')
Go

现在打开两个查询窗口并同​​时运行

declare @i int
set @i =1
while @i < 10000
begin
BEGIN TRAN

INSERT INTO Table1(id, data_field)
SELECT MAX(id) + 1, '[blob of data]' FROM Table1

COMMIT TRAN;
set @i =@i + 1
end

你会看到很多这样的内容

服务器:消息 2627,级别 14,状态 1,第 7 行违反主键约束“PK__Table1__3213E83F2962141D”。无法在对象“dbo.Table1”中插入重复的键。该声明已终止。

关于sql - 是否可以通过简单的 SQL INSERT 来实现手动增量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/794577/

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