如何为select查询返回的值创建insert语句

时间:2017-05-18 04:21:22

标签: sql sql-server-2012

我有以下选择查询:

select productid from product where productid not in (select productid from userproduct) 

给出了以下输出:

1
2
3
4

现在,我有另一个表userproduct,其中包含以下列:

userid
productid
updatetime
author

我想通过sql创建以下insert语句:

insert into userproduct values(100,1,getdate(),'abc');
insert into userproduct values(100,2,getdate(),'abc');
insert into userproduct values(100,3,getdate(),'abc');
insert into userproduct values(100,4,getdate(),'abc');
insert into userproduct values(200,1,getdate(),'abc');
insert into userproduct values(200,2,getdate(),'abc');
insert into userproduct values(200,3,getdate(),'abc');
insert into userproduct values(200,4,getdate(),'abc');

仅出于演示目的,我使用了4个值。但实际上,我会得到数百个价值观。我无法为所有这些创建插入语句。 有没有办法自动创建insert语句?

3 个答案:

答案 0 :(得分:1)

如果100& 200只是两个不同的用户ID,'abc'总是作者值,然后是

insert into userproduct (userid,productid,updatetime,author)
select 100,productid,getdate(),'abc' from product where productid not in (select productid from userproduct) 
Union
select 200,productid,getdate(),'abc' from product where productid not in(select productid from userproduct) 

答案 1 :(得分:1)

使用insert select语句。将结果与用户表交叉加入。

insert into userproduct (userid, productid, updatetime, author)
  select u.userid, p.productid, getdate(), 'abc'
  from product p
  cross join users u
  where p.productid not in (select productid from userproduct) ;

(您当然可以添加添加条件以将其限制为特定用户,例如and u.userid in (100,200)。)

(如果您因某些原因不想访问用户表,请将cross join users u替换为cross join (select 100 as userid union all select 200) u。)

答案 2 :(得分:1)

尝试:如果您要限制userid要插入并且未在表格中维护。您可以将CROSS JOIN与静态userid一起使用,如果需要,您可以添加更多内容:

INSERT INTO userproduct (userid,productid,updatetime,author)
SELECT x.userid, p.productid, getdate(),'abc' 
FROM product p
CROSS JOIN (SELECT userid FROM (values(100),(200)) x (userid)) x
WHERE productid NOT IN(SELECT productid FROM userproduct)

如果在任何表格中维护用户,我们可以在tablename中使用CROSS JOIN