繁体   English   中英

存储过程作为MERGE [INSERT]语句中的参数

[英]Stored Procedure as Parameter in MERGE [INSERT] Statement

我需要通过以下方式合并两个表:

  • 目标有一个额外的列ID。 该ID来自另一个Single Column Master Table。
  • 当在Merge语句中插入记录时,我需要在主表中插入新行,并使用其id插入TARGET表。

我创建了一个存储过程,该存储过程将插入并返回新插入的ID。 现在问题出在SQL合并内部,我们不能调用存储的Proc。

该问题的解决方案是什么? 无法使用标量函数,因为无法在函数中执行INSERT。

DECLARE @temp INT
MERGE dbo.mytabletarget T
USING dbo.mytableSource S
ON T.refId=S.RefId
WHEN MATCHED  THEN
UPDATE 
SET T.col1=S.col1,
    T.Col2=S.Col2
WHEN NOT MATCHED BY TARGET THEN
INSERT (Id,col1,col2)
VALUES({Here i need value from SP. SP simply Inserts a new Id into master table and Returns it},S.col1,S.col2);
GO

该问题的解决方案是什么?

不要使用存储过程。 很明显,不是吗?

对于merge语句,您几乎总是在执行语句中的命令。 合并专注于ETL负载,既有优点也有限制。

基本上,将逻辑放入merge语句中。

当在Merge语句中插入记录时,我需要在主表中插入新行,并使用其ID插入TARGET表。

嗯,查询表维护吗?

常规方法是确保首先填充查找表(在单独的语句中)。 由于特定的原因,ETL(这就是合并的来源)通常会分阶段进行。

抱歉,我也没有更好的解决方案;(

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM