Поскольку определения [MYDB].[dbo].[MYTABLE]
и [MYotherDB].[dbo].[MYotherTABLE]
не совпадают.
При выполнении INSERT
псевдонимы / имена столбцов в SELECT
не имеют значения для таблицы назначения. Взять, к примеру, эти 2 таблицы:
CREATE TABLE dbo.T1 (C1 int,
C2 int);
CREATE TABLE dbo.T2 (C1 int,
C2 int);
И давайте поместим некоторые данные в T1
:
INSERT INTO dbo.T1 (C1,
C2)
VALUES(1,2),(3,4);
Теперь, если мы запустим эти 2 оператора:
INSERT INTO dbo.T2
SELECT C2, C1
FROM T1;
INSERT INTO dbo.T2 (C2,C1)
SELECT C2, C1
FROM T1;
Как вы думаете, эти два утверждения идентичны? если так, то вы ошибаетесь:
SELECT *
FROM T2;
Обратите внимание, что значения (из первого оператора) «переключаются». Это потому, что первое утверждение было эквивалентно:
INSERT INTO dbo.T2 (C1,C2)
SELECT C2, C1
FROM T1;
То же самое относится и к тому, если бы мы должны были переключать столбцы в определении таблицы (что, как я подозреваю, имеет место в вашей среде):
CREATE TABLE dbo.T3 (C2 int,
C1 int);
INSERT INTO dbo.T3
SELECT C1, C2
FROM T1;
SELECT *
FROM dbo.T3
Мы не знаем определения ваших таблиц, но причина та же. Решение: всегда явно указывайте столбцы при использовании INSERT
.