当我尝试这个时:
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'
它以
失败Msg 2705,Level 16,State 3,Line 1 每个表中的列名必须是唯一的。表'CustomerOrderLines'中的列名'Order_Display_Ref'被多次指定。
SELECT * INTO和INSERT INTO SELECT *在将其他表从一个数据库复制到另一个数据库时工作正常,但它们不使用JOINS。
我的错误是什么?
答案 0 :(得分:4)
您想将DB1.dbo.CustomerOrderLines的内容添加到DB2.dbo.CustomerOrderLines吗?
然后,告诉SELECT中的SQL Server,您只需要该表的内容。
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'
答案 1 :(得分: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'
答案 2 :(得分:1)
CustomerOrderLines
和CustomerOrders
似乎有一个或多个名称相同的列,例如CustomerOrderLines.Id
和CustomerOrders.Id
会导致此类冲突,因为您的查询会尝试创建两个名为Id的列。
注意:至少有一个问题来自列Order_Display_Ref
,它出现在这两个表中。可能会有更多。
答案 3 :(得分:1)
DB1上的两个表都有Order_Display_Ref
列,所以它试图插入两次。只需提供一个列列表而不是*,它应该可以正常工作。
答案 4 :(得分: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'
答案 5 :(得分: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'