2015-06-19 40 views
-1

我正在一個項目上工作,我很難過。我有2個網站接受訂單。這些數據庫位於同一臺服務器上。每個網站將訂單數據存儲到不同數據庫中的表格中。主站點使用「dbo.Orders」,這是用於將數據提供給我們的aspdotnetstorefront後端的表。我們的銷售人員使用此界面來查看訂單。輔助站點使用「dbo.orders」,這是用於存儲訂單的表格。第二個網站的訂單不能在aspdotnetstorefront上訪問。我的工作是將來自輔助站點的訂單合併到主站點的表中,以便可以在aspdotnetstorefront後端上看到訂單,就像來自主站點的訂單一樣。我還必須創建一個標識符,以便在查看銷售人員知道訂單來自哪個網站時。我認爲創建一個臨時表,也許外部連接或合併?問題是表格沒有匹配的字段。任何建議,將不勝感激。合併來自不同數據庫的2個表沒有匹配字段到SQL Server上的臨時表

回答

1

您可以使用UNION ALL到記錄

SELECT 1 as SiteID, 
     * -- common fields 
FROM Database1.dbo.Orders 
UNION ALL 
SELECT 2 as SiteID, 
     * -- common fields 
FROM Database2.dbo.Orders 

領域結合起來,Database2.dbo.Orders必須是同一類型,如Database2.dbo.Orders領域。例如,以下內容不起作用。

SELECT 1 as SiteID, 
     CustomerName -- VARCHAR 
UNION ALL 
SELECT 2 as SiteID, 
     OrderDate -- DATETIME 

添加填料,如果你需要,如果一列只存在於一個表,你需要把它列入查詢。

SELECT 1 as SiteID, 
     CustomerName as CustomerName, 
     NULL as OrderDate -- filler to match OrderDate 
FROM Database1.dbo.Orders 
UNION ALL 
SELECT 2 as SiteID, 
     '', -- filler to match CustomerName 
     OrderDate 
FROM Database1.dbo.Orders 

要創建一個臨時表,你可以在INTO [TABLE]語法添加到第一選擇。同樣使用您的OrderNumberordId字段

SELECT 1 as SiteID, 
     OrderNumber 
INTO #temp -- create temp table to hold all rows generated from union 
FROM Database1.dbo.Orders 
UNION ALL 
SELECT 2 as SiteID, 
     ordId -- will appear in second column [OrderNumber] 
FROM Database2.dbo.Orders 
+0

只是另一個小問題。 dbo.Orders有20多個字段。 dbo.orders也是如此。名稱必須完全匹配嗎?例如dbo.Orders有OrderNumer,dbo.orders有ordID。同一件事,但名稱不同。這些合併或將所有不同的名稱字段必須是「填充」? – Fred

+0

我也在做臨時表嗎? – Fred

+0

名稱不必匹配..只是數據類型..所以只要'OrderNumber'和'ordID'都是相同的類型就可以了。如果你需要也可以轉換類型。 UNION ALL將使用第一個選擇字段中的名稱作爲下面所有表的列名。這不是做臨時表。只是一個查詢。如果你願意,你當然可以把結果插入臨時表中。 – JamieD77

相關問題