我需要按如下方式插入/更新批量记录。
来源表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 |
------------------------------
我遇到了性能问题,因为源表可能有数千条记录。 建议我批量插入/更新的最佳方法。
答案 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