从单行插入两行

dan*_*ang 4 sql-server insert t-sql sql-server-2012

我必须将usersToImport表中的用户导入userContact表中。usersToImport在一行中包含每个用户的电话和电子邮件信息,但userContact每行存储一种联系信息。

这是我目前的做法:http : //sqlfiddle.com/#!6/c9b2e/1(出于某种原因,它没有输出任何内容,但代码在 SSMS 中有效)。

有没有办法在不使用两个不同选择的情况下做到这一点?也许自加入usersToImport或以case某种方式使用。

Jon*_*gel 6

正如 Aaron 所提到的,出于某种原因,您需要终止 Fiddle 中的每个语句。

不管怎样,对于查询,你可以使用CROSS APPLY扩展结果集。此方法只扫描基表一次,并为每一行应用子查询,在这种情况下,它实际上选择了行:

INSERT INTO userContact(userId, contactType, contactInfo)
  SELECT
    ui.userId,
    c.contactType,
    c.contactInfo
    FROM usersToImport ui
    CROSS APPLY
    (
      SELECT 'email' AS contactType, ui.email AS contactInfo UNION ALL
      SELECT 'telephone', ui.telephone
    ) c;
Run Code Online (Sandbox Code Playgroud)