【问题标题】:Inserting/Updating a SQL Server table using stored procedure in BizTalk在 BizTalk 中使用存储过程插入/更新 SQL Server 表
【发布时间】:2017-05-24 16:46:54
【问题描述】:

我目前正在从 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

我使用使用适配器服务为存储过程创建了架构。在映射和编排中使用它们。虽然我无法在映射中使用 lopping functoid

因此删除了 lopping 并部署了应用程序。并尝试运行,它运行没有任何错误,但只是将 oracle 视图中的第一条记录插入到 SQL Server 数据库中,留下所有其他记录。如何解决这个问题,以便将来自 oracle 的整个记录​​集插入/更新到 SQL Server 数据库中。

【问题讨论】:

  • 你有前 1 个,所以这可能是问题所在。也许在这里使用合并命令会更好。
  • @Chuck 我如何合并。我是存储过程的新手,无法遵循

标签: sql-server stored-procedures biztalk biztalk-2013


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    使用表类型作为 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
    

    有关如何使用表值参数的更多信息,请查看此链接:- https://docs.microsoft.com/en-us/sql/relational-databases/tables/use-table-valued-parameters-database-engine

    【讨论】:

      猜你喜欢
      • 2010-09-06
      • 1970-01-01
      • 2012-10-13
      • 2013-11-07
      • 1970-01-01
      • 2023-04-07
      • 2017-12-02
      • 2015-03-02
      相关资源
      最近更新 更多