我正在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
答案 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