分かりやすく、使いやすく。

ストアドプロシージャを実行して戻り値を受け取る方法

スポンサーリンク

Excel VBA から SQL Server のストアドプロシージャを実行して、ストアドプロシージャが RETURN で返した値を受け取るサンプルコードです。

SQL Server側の設定

事前に SQL Server に以下のストアドプロシージャを作成しておきます。

sql(実行可能なサンプルコード)
1
2
3
4
5
6
CREATE PROCEDURE TEST_PROC
AS
BEGIN
    --5を返す
    RETURN 5;
END  

VBA のサンプルコード

上記のストアドプロシージャを実行して戻り値を受け取るサンプルコードは次の通りです。

このコードを実行するには、事前にADODBへの参照設定が必要です。

(参考)ExcelでADODBの参照設定を行う方法

VBA(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Option Explicit
 
Sub test()
    '■接続先情報を設定
    'この例では、ローカルのインスタンス「SQLEXPRESS」にWindows認証で接続する。
    Dim connectionString As String
    
    Dim dataSourceName As String
    Dim databaseName As String
    
    '「.」はローカルを表す。他のサーバに接続する場合はホスト名を指定。
    dataSourceName = ".\SQLEXPRESS" '
    
     'TESTデータベースに接続する。
    databaseName = "TEST"
    
    'ODBC接続の接続文字列を作成する。
    connectionString = ""
    connectionString = connectionString & "PROVIDER=MSDASQL;"
    connectionString = connectionString & "DRIVER={SQL Server};"
    connectionString = connectionString & "SERVER=" & dataSourceName & ";"
    connectionString = connectionString & "INITIAL CATALOG=" & databaseName & ";"
    connectionString = connectionString & "Trusted_connection=yes; "
    
    '■接続
    Dim objConnection As ADODB.Connection
    
    Set objConnection = New ADODB.Connection
    
    objConnection.CursorLocation = adUseClient
    objConnection.Open connectionString
    
    '■実行するストアドプロシージャを設定
    Dim objCommand As ADODB.Command
    
    Set objCommand = New ADODB.Command
    Set objCommand.ActiveConnection = objConnection
    
    objCommand.CommandType = adCmdStoredProc
    objCommand.CommandText = "TEST_PROC"
    
    '■戻り値を受け取るパラメータを設定
    Dim objParameter As ADODB.Parameter
    
    Set objParameter = objCommand.CreateParameter()
    objParameter.Name = "ReturnValue" '引数の名前(任意の名前)
    objParameter.Type = adInteger '数値
    objParameter.Direction = adParamReturnValue '戻り値
    objParameter.Value = Null
    
    objCommand.Parameters.Append objParameter
    
    '■ストアドを実行
    objCommand.Execute
        
    '■ストアドの戻り値を取得
    Dim returnValue As Integer
    returnValue = objCommand.Parameters("ReturnValue").Value
    
    Debug.Print "受け取った戻り値→" & returnValue
    
    '■終了処理
    Set objParameter = Nothing
    Set objCommand = Nothing
    Set objConnection = Nothing
End Sub 

上記を実行すると、イミディエイトウインドウに「受け取った戻り値→5」と表示されます。

スポンサーリンク
スポンサーリンク