0

我有三张桌子:

  1. 源表
  2. 消耗臭氧层物质表
  3. 暂存表

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

谢谢!

4

2 回答 2

0

您可能需要;

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)
于 2017-11-09T17:18:52.487 回答
0

SQL 合并输出子句错误

问题是变量@LOB 是一个存储过程变量,所以每当我通过 LOB 运行存储过程时,它都会截断先前 LOB 数据的暂存表,因此为什么暂存表的数据比源表和目标表都少。它是现在解决了。

于 2017-11-09T21:58:34.207 回答