【问题标题】:Interface Oracle database to a SQL Server database using BizTalk使用 BizTalk 将 Oracle 数据库连接到 SQL Server 数据库
【发布时间】:2015-04-15 14:48:29
【问题描述】:

我很难创建一个存储过程来使用 BizTalk 将选定的记录从 Oracle 数据库插入/更新到 SQL Server 数据库。

ALTER PROCEDURE [dbo].[uspInsertorUpdateINF]
@dp_id                char(32),
@dv_id                char(32),
@em_number            char(12),
@email                varchar(50),
@emergency_relation   char(32),
@option1              char(16),
@status               char(20),
@em_id                char(35),
@em_title             varchar(64),
@date_hired           datetime
AS
BEGIN
SET NOCOUNT ON;

MERGE [dbo].[em] AS [Targ]
USING (VALUES (@dp_id, @dv_id , @em_number, @email, @emergency_relation, @option1, @status, @em_id, @em_title, @date_hired))
AS [Sourc] (dp_id, dv_id, em_number, email, emergency_relation, option1, status, em_id, em_title, date_hired)  
  ON [Targ].em_id = [Sourc].em_id

  WHEN MATCHED THEN
  UPDATE 
     SET dp_id                 = [Sourc].dp_id,
         dv_id                 = [Sourc].dv_id,
         em_number             = [Sourc].em_number,
         email                 = [Sourc].email,
         emergency_relation    = [Sourc].emergency_relation,
         option1               = [Sourc].option1,
         status                = [Sourc].status,
         em_title              = [Sourc].em_title,
         date_hired            = [Sourc].date_hired

 WHEN NOT MATCHED BY TARGET THEN
  INSERT (dp_id, dv_id, em_number, email, emergency_relation, option1, status, em_id, em_title,date_hired)
  VALUES ([Sourc].dp_id, [Sourc].dv_id, [Sourc].em_number, [Sourc].email, [Sourc].emergency_relation, [Sourc].option1, [Sourc].status, [Sourc].em_id, [Sourc].em_title, [Sourc].date_hired);

 END;

它只是将一条记录从 Oracle DB 插入 SQL 数据库。但是使用下面的行选择整个记录集

<ns0:Select xmlns:ns0="http://Microsoft.LobServices.OracleDB/2007/03/View/VW_EMP30D"><ns0:COLUMN_NAMES>*</ns0:COLUMN_NAMES><ns0:FILTER></ns0:FILTER></ns0:Select>

我应该怎么做才能将整个记录集插入/更新到 SQL 数据库中。

【问题讨论】:

    标签: sql-server stored-procedures biztalk


    【解决方案1】:

    好吧,您的存储过程只需要一组(实际上是一行)参数,所以,是的,它只会更新一行。

    你有两个选择:

    1. 将此存储过程用作 WCF SQL 复合操作的一部分,您可以将每个 Oracle 结果映射到此 SP 的单个实例。
    2. 使用表值参数作为存储过程参数。

    这些 Wiki 文章包含每个过程的示例:

    http://social.technet.microsoft.com/wiki/contents/articles/26279.biztalk-streamlining-wcf-sql-and-oracle-messaging-only-and-other-patterns.aspx

    http://social.technet.microsoft.com/wiki/contents/articles/24803.biztalk-server-sql-patterns-for-polling-and-batch-retreive.aspx

    【讨论】:

      猜你喜欢
      • 2017-03-18
      • 2016-11-03
      • 2011-09-01
      • 2010-09-21
      • 2013-07-08
      • 2013-08-08
      相关资源
      最近更新 更多