キーを生成するためにストアドプロシージャを使用する方法

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  データソースとターゲット > MapForce とデータベース > ストアドプロシージャ
 >

キーを生成するためにストアドプロシージャを使用する方法

ローカルリレーションを使用して、ストアドプロシージャにより生成されたキー (ID) の一部を挿入する方法について説明されています。

 

「AdventureWorks」 データベース内にデモのストアドプロシージャを最初に作成しましょう。これを行うには、下のスクリプトをデータベースに対して実行します。Microsoft SQL Server Management Studio のクエリウィンドウ、または、 DatabaseSpy (https://www.altova.com/ja/databasespy) などのツールからこれを行うことができます。どちらの場合でも、データベースユーザーアカウントがストアドプロシージャを作成するパーミッションを有していることを確認してください。

 

CREATE PROCEDURE Production.uspAddProductModelEx
 @ModelName nvarchar(50)

 ,@Inst xml

 ,@ProductModelID int OUTPUT
AS

BEGIN
INSERT INTO [Production].[ProductModel]
          ([Name]
          ,[Instructions]
          ,[rowguid]
          ,[ModifiedDate])
    VALUES
          (@ModelName
          ,@Inst
          ,NEWID()
          ,GETDATE())
  SELECT @ProductModelID = SCOPE_IDENTITY()
END

 

上のストアドプロシージャは、 入力として2つのプロシージャ (@ModelName, @Inst) を取り、INSERT オペレーションを ProductModel テーブル内で実行します。生成された @ProductModelID を出力パラメータを返します。必要条件はストアドプロシージャにより返された @ProductModelIDProductModelIllustration テーブル内に挿入することです。

 

次のステップは必要条件を満たすマッピングの作成方法を示しています。

 

1.マッピングにストアドプロシージャを追加する方法で説明されているとおり MapForce から 「AdventureWorks」データベースに接続します。データベースユーザーアカウントがストアドプロシージャをビューして実行するパーミッションが存在することを確認してください。
2.データベースオブジェクトを選択するようにプロンプトされると、ProductModelIllustration テーブルと uspAddProductModelEx ストアドプロシージャを選択します。

mf_sp_26

3.ストアドプロシージャの横の 「コンテキストメニューの表示」 mf_ic_storedproc_menu ボタンをクリックし、「ノードをターゲットとして表示」を選択します。 左側に入力パラメーターがリストされているマッピング上でストアドプロシージャがターゲットコンポーネントとして表示されます。

mf_sp_27

4.任意で、 トランザクション内でストアドプロシージャを実行するには、 「コンテキストメニューの表示」 mf_ic_storedproc_menu ボタンをもう一度クリックし、「プロシージャの設定」を選択し、 「トランザクションの使用」 チェックボックスを選択します。ストアドプロシージャのためにトランザクションを定義することは、同じトランザクション中にキーの取得とレコードの挿入が同時に発生することを保証することができます。
5.データベースコンポーネントのタイトルバーを右クリックし、 「データベースオブジェクトを追加/削除/編集」 をコンテキストメニューから選択します。
6.「リレーションの追加/編集」 をクリックし、「リレーションの追加」をクリックします。以下に示されるようにリレーションシップを定義します。

mf_sp_28

7.「OK」 をクリックして、ダイアログボックスを閉じます。ProductModelIllustration テーブルはストアドプロシージャの子として表示されていることに注意してください。ストアドプロシージャ 出力パラメーター (@ProductModelID) はローカルリレーション内で使用されるインジケータ―に表示されます。 入力、または、出力コネクタを持ちません。

mf_sp_29

8.このサンプルでは、@Inst パラメーターは XML の型です。 コンポーネント上の @Inst パラメーターを右クリックし、 「 XML スキーマをフィールドに割り当てる」 をコンテキストメニューから選択します。 Production.ManuNstructionsSchemaCollection スキーマをデータベースから選択します。 ルート要素を選択するようにプロンプトされると、 デフォルトの値をそのままにし、「OK」をクリックします。データベース XML フィールドへのデータのマッピングの詳細に関しては、 XML データから /  データベースフィールドへのマッピングを参照してください。

mf_sp_30

9.データベースに挿入されるデータを提供するソースコンポーネントを追加します。このサンプルでは、ソースデータが定数により提供されますが、MapForce によりサポートされる他のソースコンポーネントは入力としての役割を果たします。 定数の詳細に関しては、マッピングに定数を追加するを参照してください。

mf_sp_31

このマッピングはデータベースを更新し、他のマッピングのように出力を直接プレビューしません。代わりに、「出力」 ボタンをクリックして、データベースがどのように変更されるかについてのヒントを含む疑似 SQL を表示します。トランザクションを有効化すると、これらはコメントにより示されるように発生します。

mf_sp_32

「出力」 ペイン内に表示される疑似 SQL は、実際のトランザクションコマンドを表示せず、(コメントとして) ヒントのみを表示します。実際の SQL コマンドは基になるデータベース API に送信されます。

 

データベースに対してマッピングを実行するには、以下を行います:

 

「出力」 メニューから「SQL スクリプトの実行」をクリックします。
「SQL スクリプトの実行」 mf_ic_run-sql ツールバーボタンをクリックします。

(C) 2019 Altova GmbH