SQL批量插入/更新到包含来自不同表的数据的表中

时间:2014-07-15 11:20:34

标签: sql sql-server

我需要按如下方式插入/更新批量记录。

来源表1:

User ID |  Rights |
-------------------
A       |   Y     |
B       |   N     |     
-------------------

来源表2:

 Report ID |
 -----------
 111       |
 222       |
 ----------

现在我必须插入(或者,如果记录存在则更新)上面的笛卡尔积'用户ID'列和'报告ID'列到另一个表中如下:

目标表:

 User ID | Report ID| Rights |
 ------------------------------
 A       |  111     |   Y     |
 A       |  222     |   Y     |     
 B       |  111     |   N     |     
 B       |  222     |   N     |     
 ------------------------------

我遇到了性能问题,因为源表可能有数千条记录。 建议我批量插入/更新的最佳方法。

3 个答案:

答案 0 :(得分:0)

创建表格的最简单方法是:

select UserId, ReportId, Rights
into table3
from table1 cross join table2;

如果表已经存在,我建议将其截断并将所有内容插入其中:

truncate table table3;

insert into table3(UserId, ReportId, Rights)
    select UserId, ReportId, Rights
    into table3
    from table1 cross join table2;

尝试有选择地添加新行似乎效率低下。

答案 1 :(得分:0)

INSERT INTO <Target_Table>
(UserID, ReportID, Rights)
(SELECT UserID, ReportID, Rights
FROM Table1
CROSS JOIN Table2)

答案 2 :(得分:0)

declare @t table (ID varchar(10),Name varchar(10))
insert into @t (ID,Name)values ('A','Y')
insert into @t (ID,Name)values ('B','N')

declare @tt table (RepID varchar(10))
insert into @tt (RepID)values (11)
insert into @tt (RepID)values (22)


declare @target table (ID varchar(10),Name varchar(10),Repid INT )
INSERT INTO @target (ID,Name,Repid)

select t.ID,t.Name,tt.RepID from @t t,@tt tt

select * from @target