Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSIS(在SQL Server 2012中):在查找组件中向上插入_Sql_Sql Server_Ssis_Ssis 2012 - Fatal编程技术网

SSIS(在SQL Server 2012中):在查找组件中向上插入

SSIS(在SQL Server 2012中):在查找组件中向上插入,sql,sql-server,ssis,ssis-2012,Sql,Sql Server,Ssis,Ssis 2012,我有超过10个包需要在数据流中更新/插入。我可以通过以下方式做到这一点: 查找=>匹配输出分支=>OLE DB命令 查找=>不匹配输出分支=>OLE DB目标 () () 但是,我想知道是否有某种方法可以在Lookup(或任何其他)组件中使用“Merge”语句,以便执行以下操作: MERGE [DBPrac].[dbo].[TargetTable] AS tt USING [SourceTable] AS st ON tt.Id = st.Id WHEN MATCHED THEN --*

我有超过10个包需要在数据流中更新/插入。我可以通过以下方式做到这一点:

  • 查找=>匹配输出分支=>OLE DB命令
  • 查找=>不匹配输出分支=>OLE DB目标
() ()

但是,我想知道是否有某种方法可以在Lookup(或任何其他)组件中使用“Merge”语句,以便执行以下操作:

MERGE [DBPrac].[dbo].[TargetTable] AS tt
USING [SourceTable] AS st ON tt.Id = st.Id

WHEN MATCHED THEN --* Update the records, if record found based on Id.
   UPDATE 
      SET tt.SSN = st.SSN 
          ,tt.FirstName = st.FirstName
          ,tt.MiddleName = st.MiddleName
          ,tt.LastName = st.LastName
          ,tt.Gender = st.Gender
          ,tt.DateOfBirth = st.DateOfBirth
          ,tt.Email = st.Email
          ,tt.Phone = st.Phone
          ,tt.Comment = st.Comment

WHEN NOT MATCHED BY TARGET THEN --* Insert from source to target.
    INSERT (Id, SSN, FirstName, MiddleName, LastName, Gender, DateOfBirth, Email, Phone, Comment)
    VALUES (st.Id, st.SSN, st.FirstName, st.MiddleName, st.LastName, st.Gender, st.DateOfBirth, st.Email, st.Phone, st.Comment)
;

SELECT @@ROWCOUNT;

SET IDENTITY_INSERT [dbo].[TargetTable] OFF
GO
到目前为止,我试过:

  • 在“自定义查询”中Lookup组件的“高级”窗格中,我尝试使用上述查询,但无意中发现了“SourceTable”。不知道如何在“自定义查询”中获取输入记录集 (甚至不知道这是否可能)

任何帮助和/或指针都很好。

如果我正确理解了您的问题,只需使用execute SQL任务执行Merge语句即可。那么你不需要任何查找。我们对仓库从暂存的最终加载使用相同的策略。

是的,您可以使用合并,但需要将数据加载到暂存表中。这是“ELT”方法-提取、加载(到数据库中)、转换,而不是“ETL”方法-提取、转换(在包中)、加载(到数据库中)

如果您不介意使用SQL脚本,我通常会发现ELT方法更快、更易于维护。当然,单个批量更新要比SSI中的逐行更新快