我很难创建存储过程,使用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;
我收到错误:
WcfSendPort_SqlAdapterBinding_TypedProcedures_dbo_Custom"使用URL" mssql:// abc // def?"。它将在为此发送端口指定的重试间隔后重新传输。详细信息:" System.Data.SqlClient.SqlException(0x80131904):过程或函数' uspInsertorUpdateINF'期望参数' @ dp_id',未提供
我正在使用BizTalk映射将值从Oracle DB映射到SQL Server存储过程
我不确定为什么会收到此错误。
答案 0 :(得分:2)
该过程未获取@dp_id参数。最可能的原因是源消息中的HOME_AU为空/零。您可以通过以下几种方式进行检查:
您最可能的原因是源数据对于产生HOME_AU的任何内容具有空值或空值。如果是这种情况,您可以指定@dp_id char(30) = NULL
,或者您希望它在存储过程定义中具有的任何默认值。
另外,仅供参考 - 在BizTalk的存储过程中使用表值参数通常会获得更好的性能(以及更大的灵活性)。特别是因为在这种情况下,你试图在你的程序中用参数(使用VALUES子句)构建一个表。