9 モデルケース8「ストアドプロシージャで抽出したデータをAccessに転送する」

このモデルケースでは、SQL Server上のテーブルやビューの全レコードをAccessのテーブルに転送するのではなく、特定の条件に一致するレコードだけを抽出(SELECT)するストアドプロシージャを呼び出し、そこから返されたレコードだけを転送します。

基本的な流れはモデルケース1「SQL ServerのデータをAccessに転送する」とほとんど同じです。異なるのは、転送元として「テーブル名」を指定するのではなく、「ストアドプロシージャ名」を指定する点です。またもしそのストアドプロシージャが「パラメータ」を必要とするものであればそれも指定します。

なおここでは、モデルケース1のパッケージをコピーして編集を加えるものとしてその手順を説明します。またSQL Server上には、次のようなストアドプロシージャがすでに用意されているものとします。名前は「uspCustomerFilter」、パラメータは「@City(市区町村の抽出条件)」と「@LastName(姓のフリガナの抽出条件)」です。

PROCEDURE [dbo].[uspCustomerFilter]
    @City nvarchar(50),
    @LastName nvarchar(50)
AS
BEGIN

    SELECT * FROM 得意先
    WHERE 市区町村 = @City AND [姓 (フリガナ)] LIKE '%' + @LastName + '%'

END

  • 上記ストアドプロシージャは非常に簡単なものですが、ストアドプロシージャはSQL Server側のオブジェクトであり、その文法(T-SQL)に従ってさまざまな処理を行わせることができます。たとえばAccessでいうところのさまざまなアクションクエリを実行させてからSELECT文でレコードを返すといったこともできます。

  1. ソリューションエクスプローラ上で「Case01.dtsx」をコピーして貼り付け、「Case08.dtsx」という名前に変更します。

  2. タブを「データフロー」に切り替えます。


  3. 「OLE DBソース」コンポーネントをダブルクリックして「OLE DBソースエディタ」ダイアログを開きます。


  4. パッケージをコピーしてきたので、「データアクセスモード」の欄が「テーブルまたはビュー」になっています。この欄をクリックして、ドロップダウンリストから「SQL コマンド」を選択し直します。


  5. すると画面下半分の表示内容が切り替わり、「SQLコマンドテキスト」という欄が表示されます。


  6. 「SQLコマンドテキスト」の欄にストアドプロシージャを呼び出す命令を書き込みます。必要に応じてパラメータ値も指定します。


  7. ここではキーボードから直接命令文を書き込みますので、ちょっとした記述間違いがあるかもしれません。そこで、[クエリの解析]ボタンをクリックすることで、文法的に間違いがないかをチェックすることができます。

    また[プレビュー]ボタンをクリックすることで、ストアドプロシージャから返されるデータを実際に確認することもできます。


  8. 画面を「列」の表示に切り替えて、その内容をチェックします。今回はモデルケース1のパッケージを流用していますが、もしパッケージを新規作成したような場合にはここで細かい設定を初めから行います。


  9. 問題がなければ[OK]ボタンをクリックして「OLE DBソースエディタ」ダイアログを閉じます。

  10. 「OLE DB変換先」コンポーネントをダブルクリックして「OLE DB変換先エディタ」ダイアログを開き、マッピング等の確認を行います。今回はモデルケース1のパッケージを流用していますが、もしパッケージを新規作成したような場合にはここで細かい設定を初めから行います。


  11. 問題がなければ[OK]ボタンをクリックして閉じます。

  12. パッケージを実行します。
| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved