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
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你需要开始思考就像一个程序员。你不能在一次合并中做到这一点,所以要运行两次合并。如果你想让我写你的代码,我有一个每天的费率。这是一个问答网站,不是一个“免费为我做我的工作”的位置。你能详细说明使用两次合并的概念吗?特别是对于我的场景。