2009-12-22 19 views
2

當我試試這個:複製一個表到另一個失敗 - 「在每個表的列名必須是唯一的」

SELECT * 
-- INTO DB2.dbo.CustomerOrderLines 
FROM DB1.dbo.CustomerOrderLines 
INNER JOIN DB1.dbo.CustomerOrders ON DB1.dbo.CustomerOrders.Order_Display_Ref = DB1.dbo.CustomerOrderLines.Order_Display_Ref 
WHERE DB1.dbo.CustomerOrders.Delivered_Date BETWEEN '2009-09-23' and '2009-09-24' 

它顯示正確的行。

當我嘗試將內容從一個表中DB1複製到DB2中的同一個表(並創造它,如果它不存在):

SELECT * 
INTO DB2.dbo.CustomerOrderLines 
FROM DB1.dbo.CustomerOrderLines 
INNER JOIN DB1.dbo.CustomerOrders ON DB1.dbo.CustomerOrders.Order_Display_Ref = DB1.dbo.CustomerOrderLines.Order_Display_Ref 
WHERE DB1.dbo.CustomerOrders.Delivered_Date BETWEEN '2009-09-23' and '2009-09-24' 

它失敗

消息2705,級別16,狀態3,行1 每個表中的列名必須是唯一的。表'CustomerOrderLines'中的列名'Order_Display_Ref'被多次指定。

SELECT * INTO和INSERT INTO SELECT *在將其他表從一個數據庫複製到另一個時正常工作,但它們不使用JOINS。

我的錯誤是什麼?

回答

4

您要添加到DB1.dbo.CustomerOrderLines的DB2.dbo.CustomerOrderLines內容?

然後,告訴SQL Server在你的SELECT中只需要這個表的內容。

SELECT DB1.dbo.CustomerOrderLines.* 
INTO DB2.dbo.CustomerOrderLines 
FROM DB1.dbo.CustomerOrderLines 
INNER JOIN DB1.dbo.CustomerOrders ON DB1.dbo.CustomerOrders.Order_Display_Ref = DB1.dbo.CustomerOrderLines.Order_Display_Ref 
WHERE DB1.dbo.CustomerOrders.Delivered_Date BETWEEN '2009-09-23' and '2009-09-24' 
+0

這工作,馬克西米利安 – AFD 2009-12-22 11:28:12

1

看來CustomerOrderLinesCustomerOrders具有一個或多個列名稱相同的列,例如, CustomerOrderLines.IdCustomerOrders.Id會導致這種衝突,因爲您的查詢會嘗試創建兩個名爲Id的列。

注意:至少有一個問題出現在這兩個表中的Order_Display_Ref列中。可能還有更多。

1

DB1上的兩個表都有Order_Display_Ref列,所以它試圖插入兩次。只需提供一個列列表而不是*,它應該可以正常工作。

1

您正在將DB1表加入自己並選擇所有結果列。這將意味着所有列名都被複制。

你需要指定你是從插入來源:

SELECT DB1a.* 
INTO DB2.dbo.CustomerOrderLines 
FROM DB1.dbo.CustomerOrderLines DB1a 
INNER JOIN DB1.dbo.CustomerOrders DB1b 
    ON DB1.dbo.CustomerOrders.Order_Display_Ref = DB1.dbo.CustomerOrderLines.Order_Display_Ref 
WHERE DB1.dbo.CustomerOrders.Delivered_Date BETWEEN '2009-09-23' and '2009-09-24' 
2

您加入兩個表一起這兩者在它這個Order_Display_Ref列。看起來你只是想從CustomerOrderLines數據,所以我會做:

SELECT DB1.dbo.CustomerOrderLines.* 
INTO DB2.dbo.CustomerOrderLines 
FROM DB1.dbo.CustomerOrderLines 
INNER JOIN DB1.dbo.CustomerOrders ON DB1.dbo.CustomerOrders.Order_Display_Ref = DB1.dbo.CustomerOrderLines.Order_Display_Ref 
WHERE DB1.dbo.CustomerOrders.Delivered_Date BETWEEN '2009-09-23' and '2009-09-24' 
0

或者只是重命名具有相同名稱的列。

SELECT 

TableA.Column1, 
TableA.Column1, 
TableA.Column2, 
TableA.Order_Display_Ref, 
TableB.Order_Display_Ref as TableBOrder_Display_Ref, 
TableB.ColumnN 

INTO DB2.dbo.CustomerOrderLines 
FROM DB1.dbo.CustomerOrderLines 
INNER JOIN DB1.dbo.CustomerOrders 
ON DB1.dbo.CustomerOrders.Order_Display_Ref = DB1.dbo.CustomerOrderLines.Order_Display_Ref 
WHERE DB1.dbo.CustomerOrders.Delivered_Date BETWEEN '2009-09-23' and '2009-09-24' 
相關問題