1

我想开发一个 BizTalk 业务流程。它应该在单个编排实例中将多条记录插入多个数据库表并从多个数据库表中检索插入的记录。对于这个要求,我可以在一个实例中插入数据,但是发现很难检索该实例的插入数据,因为所有记录对于每条记录都有唯一的值。对于我的情况,我应该使用存储过程来应用其他一些业务逻辑。因此,我通过调用存储过程使用“Wcf_Custom Adapter 复合功能”有两种不同的方法,如下所述。

-> Method1
我必须开发一个存储过程,它将 LoadDate("2016-05-12 10:11:22.147") 作为参数以及插入值,它将负责插入该实例的记录,通过保留给定加载日期。然后它会立即调用 Get 存储过程,该过程以 LoadDate("2016-05-12 10:11:22.147") 为参数,然后它将根据 LoadDate 值从数据库中检索最近插入的记录。

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

-> Method2
我将设计插入表,bool 数据类型列名称为“New”,值为 0 或 1。我将开发一个插入存储过程,它通过将“New”列值指定为“1”。然后它会立即调用不带参数的Get存储过程,然后它将从数据库表中检索最近插入的具有“New”列指示符“1”的记录。一旦它检索到数据,它就会将“新”列值更新为“0”。

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

4

2 回答 2

0

正如@johns-305 在他的评论中提到的那样。你应该在你的 sp 中使用表值参数。并在编排中组装所有数据,然后调用此 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
于 2016-05-12T23:29:18.260 回答
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
于 2016-05-12T18:49:34.423 回答