Sql server 在BizTalk中使用存储过程插入/更新SQL Server表

Sql server 在BizTalk中使用存储过程插入/更新SQL Server表,sql-server,stored-procedures,biztalk,biztalk-2013,Sql Server,Stored Procedures,Biztalk,Biztalk 2013,我目前正在从Oracle数据库的视图中获取一组记录,并尝试根据使用BizTalk的列将它们插入/更新到SQL Server表中的表中 为此,我创建了一个存储过程: Create PROCEDURE [dbo].[uspInsertorUpdateDepartment] @dept_name varchar(64), @jax_dept_id char(32) AS BEGIN SET NOCOUNT ON; IF (SELECT TOP (1) 1 FR

我目前正在从Oracle数据库的视图中获取一组记录,并尝试根据使用BizTalk的列将它们插入/更新到SQL Server表中的表中

为此,我创建了一个存储过程:

Create PROCEDURE  [dbo].[uspInsertorUpdateDepartment]
    @dept_name varchar(64), 
    @jax_dept_id char(32)
AS
BEGIN  
    SET NOCOUNT ON;

    IF (SELECT TOP (1) 1 FROM afm.[jax_dept] 
        WHERE jax_dept_id = @jax_dept_id) IS NULL  
        INSERT INTO afm.[jax_dept](dept_name, jax_dept_id)   
        VALUES (@dept_name,@jax_dept_id)  
    ELSE
        UPDATE afm.[jax_dept] 
        SET dept_name = @dept_name   
        WHERE jax_dept_id = @jax_dept_id
END
我使用consume adapter服务为存储过程创建了模式。在映射和编排中使用它们。虽然我无法在映射中使用“删除”functoid


因此,删除了裁剪并部署了应用程序。并尝试运行,但运行时没有出现任何错误,只是将oracle视图中的第一条记录插入SQL Server数据库,留下所有其他记录。如何实现这一点,以便将oracle中的整个记录集插入/更新到SQL Server数据库中。

在这里,我将单独的更新和插入转换为一个合并语句:

Create PROCEDURE  [dbo].[uspInsertorUpdateDepartment]
@dept_name varchar(64), 
@jax_dept_id char(32)
AS 
BEGIN  
SET NOCOUNT ON;

  merge afm.[jax_dept] as target
  using (select @dept_name as dept_name, @jax_dept_id as jax_dept_id) as source
  on source.jax_dept_id = target.jax_dept_id
  when matched then
    update target
        SET dept_name = @dept_name
  when not matched then
    insert (dept_name, jax_dept_id) 
    values (@dept_name,@jax_dept_id)
  ;
END

使用表类型作为SP的参数,而不是单独传递。我们可以 如果使用用户定义的表值作为参数,请使用“循环”functoid

CREATE TYPE dbo.SampleType AS TABLE 
(
     dept_name varchar(64) not null, 
     jax_dept_id char(32) not null
)
---
Create PROCEDURE  [dbo].[uspInsertorUpdateDepartment]
@TVP dbo.SampleType READONLY
AS
BEGIN  
SET NOCOUNT ON;
--your insert or update query
有关如何使用表值参数的更多信息,请查看以下链接:-

您拥有前1名,因此这可能是问题所在。也许在这里使用merge命令会更好。@Chuck我该如何合并。我不熟悉存储过程,无法遵循