1

BizTalk オーケストレーションを開発したいと考えています。オーケストレーションの単一インスタンスで、複数のレコードを複数の DB テーブルに挿入し、複数の DB テーブルから挿入されたレコードを取得する必要があります。この要件では、1 つのインスタンスにデータを挿入できますが、すべてのレコードが各レコードに一意の値を持っているため、そのインスタンスに挿入されたデータを取得するのは困難です。私の状況では、ストアド プロシージャを使用して、他のビジネス ロジックを適用する必要があります。したがって、以下に示すように、ストアドプロシージャを呼び出して「Wcf_Custom Adapter複合機能」を使用する2つの異なる方法があります。

-> Method1
LoadDate("2016-05-12 10:11:22.147") 値を挿入するとともにパラメーターとして受け取るストアドプロシージャを開発する必要があり、そのインスタンスのレコードを挿入することを処理します。指定された LoadDate。次にすぐに、LoadDate("2016-05-12 10:11:22.147") をパラメーターとして取得する Get ストアド プロシージャを呼び出し、LoadDate 値に基づいて DB から最近挿入されたレコードを取得します。

SQLサーバーから日付値に基づいてデータを取得することは悪い習慣であり、パフォーマンスの問題も発生します。

-> Method2
bool データ型の列名 "New" で、値が 0 または 1 になる挿入テーブルを設計します。"New" 列の値を「1」。次に、すぐに Get ストアド プロシージャを呼び出します。これはパラメーターを取りません。次に、DB テーブルから "New" 列インジケーター "1" を持つ最近挿入されたレコードを取得します。データを取得すると、「New」列の値が「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 に答える