使用 BizTalk 将 Oracle 数据库连接到 SQL Server 数据库
Interface Oracle database to a SQL Server database using BizTalk
我很难创建一个存储过程,以便使用 BizTalk insert/update 从 Oracle 数据库到 SQL Server 数据库的 selected 记录。
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 数据库中插入一条记录到 SQL 数据库中。但是 select 整个记录集使用下面的行
<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 数据库中。
好吧,您的存储过程只需要一组(实际上是一行)参数,所以,是的,它只会更新一行。
您有两个选择:
- 将此存储过程用作 WCF 的一部分 SQL 复合操作,您可以在其中将每个 Oracle 结果映射到此 SP 的单个实例。
- 使用 Table 值参数作为您的存储过程参数。
这些 Wiki 文章有每个过程的示例:
我很难创建一个存储过程,以便使用 BizTalk insert/update 从 Oracle 数据库到 SQL Server 数据库的 selected 记录。
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 数据库中插入一条记录到 SQL 数据库中。但是 select 整个记录集使用下面的行
<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 数据库中。
好吧,您的存储过程只需要一组(实际上是一行)参数,所以,是的,它只会更新一行。
您有两个选择:
- 将此存储过程用作 WCF 的一部分 SQL 复合操作,您可以在其中将每个 Oracle 结果映射到此 SP 的单个实例。
- 使用 Table 值参数作为您的存储过程参数。
这些 Wiki 文章有每个过程的示例: