使用两个查询使用INSERT语句填充表

时间:2013-05-02 18:46:14

标签: sql sql-server sql-server-2008 tsql

有人可以为我解释为什么以下情况不起作用:

insert into DrugInteractions(ndc_fk, ndc_pk)
   (select top 1 ndc from DrugList where drug_name like 'cipro%'),
   (select top 1 ndc from DrugList where drug_name like 'tizan%')

ndc中的DrugList列是唯一标识某种药物的主键。由于您需要两件事进行交互,DrugInteractions表格有两份ndc;这两个ndc将是一个复合主键。所以说药物A的ndc为1,药物B的ndc为2,那么DrugInteraction中的行看起来像:

ndc_pk   ndc_fk
1        2

有没有办法使用带有两个查询的insert语句填充表,每个列一个,就像我正在尝试的那样?我得到的错误是:

  

Msg 102,Level 15,State 1,Line 2
  ','

附近的语法不正确

3 个答案:

答案 0 :(得分:4)

insert into DrugInteractions(ndc_fk, ndc_pk)
   select top 1 ndc, newid() from DrugList where drug_name like 'cipro%'
   union
   select top 1 ndc, newid() from DrugList where drug_name like 'tizan%'

答案 1 :(得分:2)

您需要使用VALUES来合并它们;

insert into DrugInteractions(ndc_fk,ndc_pk)
VALUES(
  (select top 1 ndc from DrugList where drug_name like 'cipro%'),
  (select top 1 ndc from DrugList where drug_name like 'tizan%')
)

An SQLfiddle to test with

答案 2 :(得分:2)

这是运行多个select语句的替代方法:

insert into DrugInteractions (ndc_fk, ndc_pk) 
select min(case when drug_name like 'cipro%' then ndc end),
  min(case when drug_name like 'tizan%' then ndc end)
from DrugList

SQL Fiddle Demo