sql - 在 SQL 中一次在多行中插入相同的 MAX 值?
问题描述
我有一个一次插入 n 行的过程。每次它应该拿起MAX(BatchNo)
并与其他列一起插入。
Select @maxbatchno = MAX(batchno) from table1;
insert into table1 (name,phone,batchno)
select name,phone, maxbatchno from #temp;
上面的查询不会有并发问题吗?如果有多个用户尝试运行此过程,不会有重复吗?
解决方案
我认为您正在混合实体。您有一个“批处理”实体,但它是隐藏的。如果你有一张桌子并使用这张桌子,你就不会有问题。
我实际上假设您想要一个新的批号,它会大于以前的值。您的版本只是一遍又一遍地重复使用以前的值。所以:
create tables batches (
batchId int identity(1, 1) primary key,
createdAt datetime default getdate()
-- other columns here could be useful
);
create table @ids (batchId int);
insert into batches
output inserted.batchId into @ids
default values;
insert into table1 (name, phone, batchno)
select t.name, t.phone, i.batchId
from #temp t cross join
@ids i;
使用这种方法,您不必担心并发问题。
注意:您可以改用序列。但我认为“批次”是一流的实体,应该有自己的表。
推荐阅读
- python - 我应该如何使这些正则表达式捕获组更简洁?
- apache - 如何重写 htaccess 规则以重定向到 css 文件
- youtube-api - Python脚本结束Youtube直播
- javascript - 在 2 个 div 之间连接一条线
- javascript - 如何在 Cypress 中使用 JavascriptExecutor
- python - 请解释python生成器的问题
- html - 如何将标签+输入框向右/向左对齐?
- c# - Asp.net mvc Session[""]="xxx" 给对象引用未设置为服务器上的对象实例(在本地工作的同一项目)
- javascript - Javascript乘以字符串值
- powershell - 为什么 Write-Verbose 消息不会从条件中出现