2012-03-30 95 views
3

我是SQL的初學者,對Transact-SQL我不太瞭解。從一個表中選擇並插入到另外兩個表中

我意識到這是一個新手問題,但我正在尋找一個簡單的解決方案。

我有一些表格(locationCode, CustomerCode)。

主表

ItemCode locationCode CustomerCode 
    I001  001001   C001 
    I002  001002   C001  
    I003  001001   C002 
    I004  002001   C002 

我要選擇從該表數據,然後插入到其他兩個表。

第一表

firstTblId(autoIncrement) warehouseCode CustomerCode 
     1      001   C001 
     2      001   C002 
     3      002   C002 

warehouseCode是前三個字符的從locationCode

數據在第一表的組合由第一三個字符的locationCode和客戶代碼

第二分組表

secondTblId 
(autoIncrement) ItemCode locationCode CustomerCode firstTblId(FK) 
     1   I001  001001  C001   1 
     2   I002  001002  C001   1 
     3   I003  001001  C002   2 
     4   I004  002001  C002   3 

那麼,如何插入第一個表和第二個表,通過選擇主表的SQL行?

非常感謝您的回覆。

+0

看一看這個鏈接http://blog.sqlauthority.com/2011/08/10/sql-server-use-insert-into-select-instead-of-cursor/ – 2012-03-30 08:42:32

+0

我可以插入第二個表通過使用插入第二個表(colums,..)選擇主表 – NNNN 2012-03-30 08:46:17

+0

您可以編輯您的文章並在其中插入您的代碼,這會更容易在眼睛上=) – cctan 2012-03-30 08:49:42

回答

5

我想你想要下面的東西。臨時表@Output將捕獲第一個表的插入標識,然後可以在插入到第二個表時使用這些標識。

DECLARE @Output TABLE 
(  FirstTableID INT NOT NULL PRIMARY KEY, 
     WarehouseCode VARCHAR(3), 
     CustomerCode VARCHAR(4) 
) 
INSERT INTO FirstTable (WarehouseCode, CustomerCode) 
OUTPUT inserted.FirstTblID, inserted.WarehouseCode, inserted.CustomerCode INTO @Output 
SELECT DISTINCT LEFT(LocationCode, 3) [WarehouseCode], CustomerCode 
FROM [PrimaryTable] 

INSERT INTO SecondTable (ItemCode, LocationCode, CustomerCode, FirstTblID) 
SELECT p.ItemCode, 
     p.LocationCode, 
     p.CustomerCode, 
     o.FirstTableID 
FROM [PrimaryTable] p 
     INNER JOIN @Output o 
      ON LEFT(LocationCode, 3) = WarehouseCode 
      AND p.CustomerCode = o.CustomerCode 
相關問題