文書番号: 401673
最終更新日: 1998/02/10
{call ストアドプロシージャ名} exec ストアドプロシージャ名また、プロシージャが引数を持つ場合は次のように記述します。
{call ストアドプロシージャ名 (param1,param2,....)} exec スロアドプロシージャ名 param1, param2サンプル モジュールは「 SQL Server 」に対するものを用意しました。プログラ
SQL Server プログラム実行環境 サーバー SQLServer ODBC ドライバ SQLServerODBC ドライバ (Excel5.0 添付) データソース名 TstSQL TstSQL の内容 サーバー名 serversql1 ユーザー ID sa データベース pubs パスワード ExcelXLODBC アドイン関数を使用したサンプル モジュールは次の通りです。
'以下の 2 行は改行せずにコードを入力してください。 '上の 2 行は改行せずにコードを入力してください。
Sub RunSQLProcedure1_1() Dim con As Variant 'データソースとの接続を確立し SQLOpen のリターン値を変数 con にセット '以下の 2 行は改行せずにコードを入力してください。 con = SQLOpen("DSN=TstSQL;SERVER=serversql1;UID=sa;DATABASE=pubs; PWD=Excel", , 2) '上の 2 行は改行せずにコードを入力してください。 'ストアドプロシージャの実行 SQLExecQuery con, "{call tst01proc}" '以前に実行されたクエリーの結果を取得し Sheet1 のセル A1 に貼り付け SQLRetrieve con, Range("Sheet1!A1"), , , True 'データソースとの接続を切断 SQLClose con End Sub
Sub RunSQLProcedure1_2() Dim con As Variant 'データソースとの接続を確立し SQLOpen のリターン値を変数 con にセット '以下の 2 行は改行せずにコードを入力してください。 con = SQLOpen("DSN=TstSQL;SERVER=serversql1;UID=sa;DATABASE=pubs; PWD=Excel", , 2) '上の 2 行は改行せずにコードを入力してください。 'ストアドプロシージャの実行 SQLExecQuery connection, "exec tst01proc" '以前に実行されたクエリーの結果を取得し Sheet1 のセル A1 に貼り付け SQLRetrieve con, Range("Sheet1!A1"), , , True 'データソースとの接続を切断 SQLClose con End Sub
Sub RunSQLProcedure2() Dim stored_proc, con, userno As String Dim Results Dim x As Integer Dim wksheet As Worksheet '書店番号の入力 Lin1: userno = Application.InputBox(prompt:="抽出する書店番号を入力して下さい", _ Title:="売上抽出", Type:=2) Select Case userno Case False 'キャンセルボタンが押されたら処理終了 MsgBox "処理を終了します" Exit Sub Case "" '何も入力されずに OK ボタンが押されたらもう一度入力するか 'どうか確認 Response = MsgBox(prompt:="書店番号が入力されていません" _ & Chr(10) & "もう一度入力しますか", _ Buttons:=vbYesNo) 'はい が押されたら書店番号の入力のダイアログを表示 If Response = vbYes Then GoTo Lin1 Else 'いいえ が押されたら処理を終了 MsgBox "処理を終了します" Exit Sub End If End Select 'プロシージャ呼び出し文定義 stored_proc = "{Call tst02proc('" & userno & "')}" '接続文字列定義 con = "DSN=TstSQL;SERVER=serversql1;UID=sa;DATABASE=pubs;PWD=Excel" 'ストアドプシージャ実行 '結果の配列を Results にセット Results = SQLRequest(con, stored_proc, , 2, True) 'ワークシート Sheet1 に結果の貼り付け Set wksheet = ThisWorkbook.Worksheets("Sheet1") wksheet.Range(wksheet.Cells(1, 1), _ wksheet.Cells(UBound(Results, 1), _ UBound(Results, 2))).FormulaArray = Results SQLClose con End Sub
Sub RunSQLProcedure3() Dim stored_proc, userno As String Dim x As Integer Dim con As Variant '書店番号の入力 Lin1: userno = Application.InputBox(prompt:="抽出する書店番号を入力して下さい", _ Title:="売上抽出", Type:=2) Select Case userno Case False 'キャンセルボタンが押されたら処理終了 MsgBox "処理を終了します" Exit Sub Case "" '何も入力されずに OK ボタンが押されたらもう一度入力するか 'どうか確認 Response = MsgBox(prompt:="書店番号が入力されていません" _ & Chr(10) & "もう一度入力しますか", _ Buttons:=vbYesNo) 'はい が押されたら書店番号の入力のダイアログを表示 If Response = vbYes Then GoTo Lin1 Else 'いいえ が押されたら処理を終了 MsgBox "処理を終了します" Exit Sub End If End Select 'プロシージャ呼び出し文定義 stored_proc = "{Call tst02proc('" & userno & "')}" 'データソースとの接続を確立し SQLOpen のリターン値を変数 con にセット '以下の 2 行は改行せずにコードを入力してください。 con = SQLOpen("DSN=TstSQL;SERVER=serversql1;UID=sa;DATABASE=pubs; PWD=Excel", , 2) '上の 2 行は改行せずにコードを入力してください。 'ストアドプシージャ実行 SQLExecQuery con, stored_proc '以前に実行されたクエリーの結果を取得し Sheet1 の A1 のセルに貼り付け SQLRetrieve con, Range("Sheet2!A1"), , , True 'データソースとの接続を切断 SQLClose con End Sub
'プロシージャー TstPara を呼び出す TstPara2 を作成し TstPara2 を実行する方法 Sub RunSQLProcedure4_1() Dim con As Variant 'データソースとの接続を確立し SQLOpen のリターン値を変数 con にセット '以下の 2 行は改行せずにコードを入力してください。 con = SQLOpen("DSN=TstSQL;SERVER=serversql1;UID=sa;DATABASE=pubs; PWD=Excel", , 2) '上の 2 行は改行せずにコードを入力してください。 'ストアドプロシージャの実行 SQLExecQuery con, "{call TstPara2}" '以前に実行されたクエリーの結果を取得し Sheet1 の A1 のセルに貼り付け SQLRetrieve con, Range("Sheet1!A1") 'データソースとの接続を切断 SQLClose con End Sub
'プロシージャー TstPara を呼び出す TstPara2 を作成し TstPara2 を実行する方法 Sub RunSQLProcedure4_2() Dim con As Variant 'データソースとの接続を確立し SQLOpen のリターン値を変数 con にセット '以下の 2 行は改行せずにコードを入力してください。 con = SQLOpen("DSN=TstSQL;SERVER=serversql1;UID=sa;DATABASE=pubs; PWD=Excel", , 2) '上の 2 行は改行せずにコードを入力してください。 'ストアドプロシージャの実行 SQLExecQuery con, "exec TstPara2" '以前に実行されたクエリーの結果を取得し Sheet1 の A1 のセルに貼り付け SQLRetrieve con, Range("Sheet1!A1") 'データソースとの接続を切断 SQLClose con End Sub
CREATE PROCEDURE TstPara2 as declare @bb int exec TstPara 5, 6, @bb output select @bb
'TstPara を declare から直接実行する方法 Sub RunSQLProcedure4_3 Dim con As Variant 'データソースとの接続を確立し SQLOpen のリターン値を変数 con にセット '以下の 2 行は改行せずにコードを入力してください。 con = SQLOpen("DSN=TstSQL;SERVER=serversql1;UID=sa;DATABASE=pubs; PWD=Excel", , 2) '上の 2 行は改行せずにコードを入力してください。 'ストアドプロシージャの実行 '以下の 2 行は改行せずにコードを入力してください。 SQLExecQuery con, "declare @bb int exec TstPara 5, 6, @bb output select @bb" '上の 2 行は改行せずにコードを入力してください。 '以前に実行されたクエリーの結果を取得し Sheet1 の A1 のセルに貼り付け SQLRetrieve con, Range("Sheet1!A1") 'データソースとの接続を切断 SQLClose con End Sub
SQLServer 「 Microsoft Query 」の [?]-[目次] コマンド - [リファレンス ODBC ドライバ] - [SQL Server] - [上級ユーザー向け 接続文字列 (上級)] その他 ODBC ドライバ メーカーにお問い合わせ下さい
Keywords: KBHOWTO KB401673
Technology: kbExcel500 kbExcelSearch kbExcelWinSearch