1

我想開發一個BizTalk業務流程。它應該將多個記錄插入到多個數據庫表中,並在單個業務流程實例中從多個數據庫表中檢索插入的記錄。對於此需求,我可以在一個實例中插入數據,但難以檢索該實例的插入數據,因爲所有記錄對於每條記錄都具有唯一值。對於我的情況,我應該使用存儲過程來應用其他業務邏輯。所以我有兩種不同的方法,通過調用存儲過程使用「Wcf_Custom Adapter複合功能」,如下所述。將多條記錄插入到數據庫並使用BizTalk在單個實例中從數據庫獲取多條記錄的最佳實踐是什麼?

- >方法1
我不得不開發一個存儲過程,這需要LoadDate(「2016年5月12日10:11:22.147」)作爲參數用插入值一起,而且需要插入的護理通過保持給定的LoadDate來記錄該實例。然後立即調用Get存儲過程,它將LoadDate(「2016-05-12 10:11:22.147」)作爲參數,然後它將根據LoadDate值從DB中檢索最近插入的記錄。

我知道,從sql server檢索基於日期值的數據是一種不好的做法,它也會帶來性能問題。

- >方法2
我會設計插入表格,用布爾數據類型列名「新建」和值將是0或1。我將開發一個插入存儲過程,其通過插入數據將「新」列值設爲「1」。然後立即調用Get存儲過程,它不會不帶參數,然後它將從數據庫表中檢索最近插入的具有「新」列指示符「1」的記錄。一旦它檢索到數據,它會將「新」列值更新爲「0」。

我更喜歡這種方法2。但是,我們有更好的選擇嗎?

+0

是否有這一切複雜的一個原因?您可以使用表值參數將所有內容傳遞給一個SP,然後幾乎可以直接插入表中。您也可以返回表值類型列。而且,根據日期檢索數據沒有任何問題。 –

回答

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 [email protected] and [email protected] 
0

正如@在他的評論中提到的約翰 - 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 
相關問題