我想开发一个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。但是,我们有更好的选择吗?
答案 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