SQL 合并输出子句错误

SQL Merge Output Clause Error

我有三个table:

  1. 来源table
  2. 消耗臭氧层物质table
  3. 分期table

我的合并语句使用源 table 将数据插入 ODS 并将输出插入暂存 table。 insert 后,source table 和ODS 的count 是一样的,但是staging count 比两者都少。 output 子句应该将 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

谢谢!

您可能需要 ;:

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 doc

The MERGE statement requires a semicolon (;) as a statement terminator.


另外 OUTPUT INSERTED.* INTO STG.table; 是巨大的反模式,* 并且没有定义列列表

output inserted.col1, inserted.col2 INTO stg.table(col1_name, col2_name)

SQL 合并输出子句错误

问题是变量@LOB 是一个存储过程变量,所以每当我 运行 LOB 的存储过程时,它都是 t运行cating staging table LOB 数据因此,为什么暂存 table 的数据比源和目标 table.It 的数据都少,现在已解决。