我有三张桌子:
我的merge语句使用源表将数据插入ODS并将输出插入Staging表。插入后,源表和ODS的计数是相同的,但是,分段计数小于两者。输出子句应该将正在ODS中插入的内容的副本插入到暂存中,但事实并非如此。有人知道为什么会这样吗?我的合并声明如下: -
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
谢谢!
答案 0 :(得分: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 doc:
MERGE语句需要使用分号(;)作为语句终止符。
同样OUTPUT INSERTED.* INTO STG.table;
是一个巨大的反模式,*
并且没有定义列列表
output inserted.col1, inserted.col2 INTO stg.table(col1_name, col2_name)
答案 1 :(得分:0)
SQL合并输出子句错误
问题是变量@LOB是一个存储过程变量,因此每当我通过LOB运行存储过程时,它都会截断先前LOB数据的登台表,因此登台表的数据少于源和目标table.It现在已经解决了。