Я не могу сделать вставку в таблицу вместе с командой Merge - PullRequest
0 голосов
/ 03 июля 2019

Невозможно выполнить оператор слияния со вставкой (для процесса учета)

Таблица1 содержит GRList для списания (на основе даты в Таблице3)

Таблица2 Содержит все детали GR (вся информация изС 1 января 2010 года по настоящее время)

В таблице 3 указана самая ранняя дата заявки (например, 1 апреля 2018 года)

, то есть из вышеприведенного сценария Самая старая заявка даты (например, 1 апреля2018) выбирается из таблицы 3, а затем ищет в таблице 2 GR, которые находятся до извлеченной даты (<= 1 апреля 2018 года), и заполняет запись (с 1 января 2010 года по 31 марта 2018 года)) в Таблице 1 </p>

Код, проверенный на SQL

MERGE Table1 As Target
Using (select column1, column2 From Table2 AS tbl2 INNER JOIN Table3 as tbl3
ON tbl2.column1 = tbl3.column1
WHERE
tbl2.column1 = tbl3.column1 AND tbl2.column2 = tbl3.column2) AS SOURCE

ON
(Target.Column1 = Source.Column1 AND Target.Column2 = Source.Column2  AND Target.Column5 <= Source.Column5 )

WHEN MATCHED AND 
Target.Column1 = Source.Column1 AND Target.Column2 = Source.Column2

THEN UPDATE SET Target.Column4='Updated'

WHEN NOT MATCHED BY TARGET 
THEN INSERT 
(Column1, Column2, Column3)
VALUES
(Source.Column1, Source.Column2, Source.Column3)

ОШИБКА

Сообщение 248, Уровень 16, Состояние 1, Строка 23 Преобразование значения nvarchar '3000143371' переполнило столбец int.Заявление было прекращено.

1 Ответ

0 голосов
/ 03 июля 2019

Один из типов данных столбца вашей целевой таблицы - INT.Вы пытаетесь вставить значение, которое является большим для типа данных INT. Попробуйте изменить тип данных целевого столбца с INT на BIGINT.

...