SQL SERVER + MS Access + ストアド プロシージャ

今回は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で対応することが可能です。

viva