将多个记录插入数据库并使用BizTalk在单个实例中从DB获取多个记录的最佳做法是什么?

时间:2016-05-12 17:28:42

标签: sql-server biztalk biztalk-2010 biztalk-2013 biztalk-orchestrations

我想开发一个BizTalk业务流程。哪个应该在多个数据库表中插入多个记录,并在业务流程的单个实例中从多个数据库表中检索插入的记录。对于这个要求,我能够在一个实例中插入数据,但看到难以检索该实例的插入数据,因为所有记录都有每个记录的唯一值。对于我的情况,我应该使用存储过程来应用其他一些业务逻辑。所以我有两种不同的方法,使用" Wcf_Custom适配器复合功能"通过调用存储过程,如下所述。

- >方法1
       我必须开发一个存储过程,它将LoadDate(" 2016-05-12 10:11:22.147")作为参数与插入值一起使用,它将负责插入该实例的记录,通过保持给定的LoadDate。然后立即调用Get存储过程,它将LoadDate(" 2016-05-12 10:11:22.147")作为参数,然后它将根据LoadDate值从DB中检索最近插入的记录。

我知道,根据sql server中的日期值检索数据是一种不好的做法,它也会产生性能问题。

- >方法2
       我将设计插入表,使用bool数据类型列名" New"并且值将为0或1.我将开发一个Insert Stored过程,它通过给出" New"来插入数据。列值为" 1"。然后它会立即调用Get存储过程,它不会带任何参数,然后它会检索最近插入的记录,这些记录有" New"列指示符" 1"来自数据库表。一旦它检索到数据,它就会更新"新的"列值为" 0"。

我更喜欢这种方法2。但是,我们有更好的选择吗?

2 个答案:

答案 0 :(得分:0)

我认为您的存储过程可能如下所示:

create procedure myProc
@a int, @b varchar(100)
as
insert myTable(a,b,c)
OUTPUT inserted.* --this line
select a,b,c
from somewhere
where a=@a and b=@b

答案 1 :(得分:0)

正如@ johns-305在评论中提到的那样。你应该在你的sp中使用表值param。然后在业务流程中汇编所有数据,然后调用此sp。

示例sp可能如下所示:

CREATE TYPE [dbo].[SampleDataTable_Type] AS TABLE(
    [ID] [int] NOT NULL,
    [Name] [varchar](50) NOT NULL,
    PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)

GO 

CREATE PROCEDURE [dbo].[sp_InsertSampleTableData]
(
    @LoadDate DATETIME,
    @data [SampleDataTable_Type] READONLY
)
AS
BEGIN
    SET NOCOUNT ON

    INSERT INTO your_table(id, name,)
    SELECT id, name FROM @data;

    --Do whatever you want

    SET NOCOUNT OFF
END

GO