在SQL中处理具有多个输入源的表上的批量插入

时间:2016-08-24 10:24:03

标签: sql sql-server database

我正在sql server 2012中的表上执行批量插入,同时我选择带有max()函数的最后一个插入行并将其插入另一个表,当我的表从中获取数据时如何执行此操作多个源,因为在执行插入到辅助表时,存在时间延迟,而插入仍然发生在主表中,所以下次max()将获取最后更新的行,我将丢失一些不是max()但仍插入到主行中的行同时表。

create table dbo.emp
(
id int primary key identity(1,1),
emp_id int,
name varchar(255),
address varchar(255)
)

create table dbo.empx
(
id int primary key,
emp_id int foreign key references dbo.emp(id),
)


    declare @temp int ;
        set @temp=1;
        while @temp<1000
        begin
        insert into dbo.emp(emp_id,name,address)values (100+@temp,'Ename'+LTRIM(STR(@temp)),'123 Sample Address'+LTRIM(STR(@temp)));
        set @temp=@temp+1; 

        insert into dbo.empx  select max(dbo.emp.id),max(dbo.emp.emp_id) from dbo.emp 

        end

1 个答案:

答案 0 :(得分:0)

使用OUTPUT子句......

CREATE TABLE #empx
(Id INT ,emp_id VARCHAR(50))

DECLARE @temp INT ;
SET @temp=1;
    WHILE @temp<1000
    BEGIN
        INSERT INTO dbo.emp(emp_id,name,address)
            OUTPUT INSERTED.Id,INSERTED.emp_id INTO #empx(Id,emp_id)
        VALUES (100+@temp,'Ename'+LTRIM(STR(@temp)),'123 Sample Address'+LTRIM(STR(@temp)));

        SET @temp=@temp+1; 

    END
INSERT INTO dbo.empx(Id,emp_id)
SELECT Id,emp_id FROM #empx

或使用触发器

CREATE TRIGGER EmpLog
   ON  dbo.emp
   AFTER Insert
AS 
BEGIN
    SET NOCOUNT ON;
    Insert into dbo.empx (id,emp_id) Select id,emp_id from inserted;
END
GO