同时获取和插入多个表的值?

时间:2017-01-09 15:24:01

标签: sql sql-server

我有一张桌子,例如:

CREATE TABLE orders (
    [id] [int] IDENTITY(1,1) NOT NULL,
    [number] [int] NOT NULL,
    [date] [datetime] NOT NULL
)

number列也是唯一的,下一个数字由存储过程确定,获取当前数字+ 1并将其保存回公共numbers表:

CREATE TABLE numbers (
    [id] [int] IDENTITY(1,1) NOT NULL,
    [tablename] [varchar](100) NOT NULL,
    [currentnumber] [int] NOT NULL
)

插入单个记录时,上述系统工作正常。但是,现在我有一种情况,即我正在批量插入记录,每个插入的记录必须具有由存储过程确定的唯一编号。

目前,我设法让这个工作的唯一方法是使用一个光标获取下一个n数字并将它们存储到一个表变量中,类似于:

declare @recordid int
declare @nextnumber int
declare cur CURSOR LOCAL for
select id from @records

open cur

fetch next from cur into @recordid

while @@FETCH_STATUS = 0 BEGIN
    exec @nextnumber = get_nextnumber 'orders', @nextnumber output
    insert into @numbers VALUES (@recordid, @id_nextnumber);

    fetch next from cur into recordid
END

close cur
deallocate cur

之后,我将@numbers表变量与@records TVP一起加入,并将记录插入到实际表格中。

是否有更好更清洁的方法来完成上述操作但完全避免使用游标?

插入应该使用MERGE INTO完成,因为我需要使用OUTPUT来捕获一些列。

0 个答案:

没有答案