首页 > 解决方案 > 在 SQL 中一次在多行中插入相同的 MAX 值?

问题描述

我有一个一次插入 n 行的过程。每次它应该拿起MAX(BatchNo)并与其他列一起插入。

Select @maxbatchno = MAX(batchno) from table1;

insert into table1 (name,phone,batchno) 
select name,phone, maxbatchno from #temp;

上面的查询不会有并发问题吗?如果有多个用户尝试运行此过程,不会有重复吗?

标签: sqlsql-servertsqlsql-server-2008sql-server-2012

解决方案


我认为您正在混合实体。您有一个“批处理”实体,但它是隐藏的。如果你有一张桌子并使用这张桌子,你就不会有问题。

我实际上假设您想要一个新的批号,它会大于以前的值。您的版本只是一遍又一遍地重复使用以前的值。所以:

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;

使用这种方法,您不必担心并发问题。

注意:您可以改用序列。但我认为“批次”是一流的实体,应该有自己的表。


推荐阅读