2009-12-22 3 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' 

он терпит неудачу с

Msg 2705, Уровень 16, состояние 3, строка 1 Имена столбцов в каждой таблице должны быть уникальными. Название столбца «Order_Display_Ref» в таблице «CustomerOrderLines» указано более одного раза.

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

1

Кажется, что CustomerOrderLines и CustomerOrders имеют один или несколько столбцов, где имя совпадает, например. CustomerOrderLines.Id и CustomerOrders.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' 
Смежные вопросы

 Смежные вопросы