Ошибка предложения вывода SQL Merge

У меня есть три таблицы:

  1. исходная таблица
  2. Таблица ODS
  3. Постановочный стол

Мой оператор слияния использует исходную таблицу для вставки данных в ODS и выходы в промежуточную таблицу. После вставки количество исходной таблицы и ODS одинаково, однако количество этапов меньше, чем у обоих. Предполагается, что выходное предложение вставляет копию того, что вставляется в ODS, в Staging, но это не так. Кто-нибудь знает, почему это так? Мое заявление о слиянии выглядит следующим образом:

BEGIN TRANSACTION
BEGIN TRY
/* truncate staging table */
TRUNCATE TABLE stage table 

/* merge into ODS based on NK */
MERGE INTO ODS table as TRG
USING source table as SRC
/* ON Natural Key for that table/data type */
    ON TRG.column = SRC.column

/* insert new records into ODS */
WHEN NOT MATCHED AND SRC.column = @LOB THEN
    INSERT (columns )
    VALUES ( columns )

OUTPUT INSERTED.* INTO STG. table

COMMIT TRANSACTION

Спасибо!

2 ответа

Решение

Ошибка предложения вывода SQL Merge

Проблема заключалась в том, что переменная @LOB была переменной хранимой процедуры, поэтому всякий раз, когда я запускал хранимую процедуру с помощью LOB, она усекала промежуточную таблицу предыдущих данных большого объекта, поэтому в промежуточной таблице было меньше данных, чем в исходной и целевой таблицах. решено сейчас.

Вам наверное нужно ;:

BEGIN TRANSACTION

BEGIN TRY
/* truncate staging table */
TRUNCATE TABLE stage table ;

/* merge into ODS based on NK */
MERGE INTO ODS table as TRG
USING source table as SRC
/* ON Natural Key for that table/data type */
    ON TRG.column = SRC.column

/* insert new records into ODS */
WHEN NOT MATCHED AND SRC.column = @LOB THEN
    INSERT (columns )
    VALUES ( columns )

OUTPUT INSERTED.* INTO STG.table;

COMMIT TRANSACTION;

Из слияния док:

Оператор MERGE требует точки с запятой (;) в качестве завершения оператора.


Также OUTPUT INSERTED.* INTO STG.table; огромный антипаттерн, * и не определяя список столбцов

output inserted.col1, inserted.col2 INTO stg.table(col1_name, col2_name)
Другие вопросы по тегам