今回はSQL SERVERのストアドプロシージャを手軽に使う方法です。
あまり利用するケースが少ないですが、レアケースがあった場合に便利です。
プログラミング的なことをストアドプロシージャでやろうとすると結構面倒くさいので、今回はVBA(MS Access)側でSQL SERVER向けのSQLを生成し、SQL SERVER側でSQLを処理する形です。
ストアドプロシージャーの記述
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROCEDURE [dbo].[svr_query] @sql text AS BEGIN exec (@sql) END
VBAの記述
Dim ws As DAO.Workspace Dim db As DAO.Database Dim tb As DAO.Recordset Dim sql as String sql = "select * from dbo.TEST where COL_A='サンプルテキスト';" sql = Replace(sql, "'", "''") Set ws = DBEngine.Workspaces(0) Set db = ws.OpenDatabase("", False, False, "ODBC;DSN=●●●●;UID=●●●;PWD=●●●;") Set tb = db.OpenRecordset("EXECUTE svr_query '" & sql & "'", dbOpenSnapshot, dbSQLPassThrough) If tb.RecordCount > 0 Then Do Until tb.EOF *****取得したデータの処理***** tb.MoveNext Loop End If
※途中、sqlのシングルクォーテーションを二重に置換してますが、こうしないとSQL SERVER側でSQLが実行されません。
また、この方法を用いることで、データベースが別の場合もシンプルなSQLで対応することが可能です。