0

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

  • 目标有一个额外的列 ID。此 ID 来自另一个单列主表。
  • 在 Merge 语句中插入记录时,我需要在 mater 表中插入一个新行并使用它id插入到 TARGET 表中。

我创建了一个存储过程,它插入并返回新插入的 ID。现在问题出在 SQL Merge 内部,我们不能调用存储的 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
4

1 回答 1

0

这个问题的解决方案是什么?

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

对于合并语句,您几乎只能在语句中执行命令。Merge 专注于 ETL 负载,既有优点也有局限性。

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

在 Merge 语句中插入记录时,我需要在 mater 表中插入一个新行并使用它的 id 插入到 TARGET 表中。

嗯,查找表维护?

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

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

于 2013-01-15T12:47:42.500 回答