合并以在 SQL 服务器数据库中插入或更新记录
Merge to Insert or update records in SQL Server database
我很难使用 BizTalk 创建一个存储过程来 insert/update 从 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;
我遇到一个错误:
WcfSendPort_SqlAdapterBinding_TypedProcedures_dbo_Custom" with URL "mssql://abc//def?". It will be retransmitted after the retry interval specified for this Send Port. Details:"System.Data.SqlClient.SqlException (0x80131904): Procedure or function 'uspInsertorUpdateINF' expects parameter '@dp_id', which was not supplied
我正在使用 BizTalk 映射将 Oracle 数据库中的值映射到 SQL 服务器存储过程
我不确定为什么会出现此错误。
该过程未获取 @dp_id 参数。最可能的原因是源消息中的 HOME_AU 是 empty/nil。您可以通过多种方式进行检查:
- Group Hub 选项卡,查询暂停实例,查看暂停实例的消息,查找 dp_id 节点的值
- 为处理此消息的端口/编排打开消息跟踪,并查看跟踪的消息事件;这也会向您显示成功的消息(如果有的话),并且可能会为您提供源消息。
- 使用 SQL Server Profiler 检查实际过程调用,并检查作为 @dp_id 传递的参数值。如果您在 XML.
中没有看到关于 HOME_AU/dp_id 的任何异常,这可用于诊断问题
您最可能的原因是源数据对于正在生成的内容具有 null 或空值 HOME_AU。如果是这种情况,您可以指定 @dp_id char(30) = NULL
,或者您希望它在存储过程定义中具有的任何默认值。
此外,仅供参考 - 在 BizTalk 的存储过程中使用 Table 值参数通常会获得更好的性能(和更大的灵活性)。特别是因为,在这种情况下,无论如何,您都在尝试从过程中的参数(使用 VALUES 子句)构建 table。
我很难使用 BizTalk 创建一个存储过程来 insert/update 从 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;
我遇到一个错误:
WcfSendPort_SqlAdapterBinding_TypedProcedures_dbo_Custom" with URL "mssql://abc//def?". It will be retransmitted after the retry interval specified for this Send Port. Details:"System.Data.SqlClient.SqlException (0x80131904): Procedure or function 'uspInsertorUpdateINF' expects parameter '@dp_id', which was not supplied
我正在使用 BizTalk 映射将 Oracle 数据库中的值映射到 SQL 服务器存储过程
我不确定为什么会出现此错误。
该过程未获取 @dp_id 参数。最可能的原因是源消息中的 HOME_AU 是 empty/nil。您可以通过多种方式进行检查:
- Group Hub 选项卡,查询暂停实例,查看暂停实例的消息,查找 dp_id 节点的值
- 为处理此消息的端口/编排打开消息跟踪,并查看跟踪的消息事件;这也会向您显示成功的消息(如果有的话),并且可能会为您提供源消息。
- 使用 SQL Server Profiler 检查实际过程调用,并检查作为 @dp_id 传递的参数值。如果您在 XML. 中没有看到关于 HOME_AU/dp_id 的任何异常,这可用于诊断问题
您最可能的原因是源数据对于正在生成的内容具有 null 或空值 HOME_AU。如果是这种情况,您可以指定 @dp_id char(30) = NULL
,或者您希望它在存储过程定义中具有的任何默认值。
此外,仅供参考 - 在 BizTalk 的存储过程中使用 Table 值参数通常会获得更好的性能(和更大的灵活性)。特别是因为,在这种情况下,无论如何,您都在尝试从过程中的参数(使用 VALUES 子句)构建 table。