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

Sql 存储过程作为MERGE[INSERT]语句中的参数,sql,sql-server,sql-merge,Sql,Sql Server,Sql Merge,我需要按以下方式合并两个表: 目标有一个额外的列ID。此ID来自另一个单列主表 在Merge语句中插入记录时,我需要在主表中插入一个新行,并使用其id插入目标表 我创建了一个存储过程,可以插入并返回新插入的ID。现在问题出在SQL Merge内部,我们不能调用存储过程 这个问题的解决方案是什么?无法使用标量函数,因为无法在函数中执行插入 DECLARE @temp INT MERGE dbo.mytabletarget T USING dbo.mytableSource S ON T.ref

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

  • 目标有一个额外的列ID。此ID来自另一个单列主表
  • 在Merge语句中插入记录时,我需要在主表中插入一个新行,并使用其
    id
    插入目标表
我创建了一个存储过程,可以插入并返回新插入的ID。现在问题出在SQL Merge内部,我们不能调用存储过程

这个问题的解决方案是什么?无法使用标量函数,因为无法在函数中执行插入

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语句,您几乎只能执行语句中的命令。Merge专注于ETL负载,既有优势也有局限性

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

在Merge语句中插入记录时,我需要在主表中插入一个新行 并使用其id插入到目标表中

嗯,查表维护

通常的方法是确保先填充查找表(在单独的语句中)。ETL(合并就是从这里产生的)经常因为这个特殊的原因在各个阶段工作


对不起,我也没有更好的解决方案;(

您可以尝试使用
INSERT…EXEC…
语法将SP执行到临时表或表变量中,然后与之合并?如何在合并语句中填充查找表而不是在单独的语句中。“分阶段工作”。首先填充查找表,然后填充事实数据。这是标准的。或者,您可以尝试合并到具有处理查找的instead of insert触发器的视图中。我需要为合并中的每个insert插入查找表。您是否可以编辑原始帖子中的代码来详细说明这一点。Thanks@user1711287你需要开始思考就像一个程序员。你不能在一次合并中做到这一点,所以要运行两次合并。如果你想让我写你的代码,我有一个每天的费率。这是一个问答网站,不是一个“免费为我做我的工作”的位置。你能详细说明使用两次合并的概念吗?特别是对于我的场景。