Sql-Server

從單行插入兩行

  • May 8, 2020

我必須將使用者從usersToImport表中導入到userContact表中。usersToImport在一行中包含每個使用者的電話和電子郵件資訊,但userContact每行儲存一種聯繫資訊。

這是我目前的做法:http ://sqlfiddle.com/#!6/c9b2e/1 (出於某種原因,它沒有輸出任何東西,但程式碼在 SSMS 中有效)。

有沒有辦法在不使用兩個不同選擇的情況下做到這一點?也許自我加入usersToImport或以case某種方式使用。

正如 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;

引用自:https://dba.stackexchange.com/questions/51337