Ошибка предложения вывода SQL Merge
У меня есть три таблицы:
- исходная таблица
- Таблица ODS
- Постановочный стол
Мой оператор слияния использует исходную таблицу для вставки данных в 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)