私はそれを考え出した。ADO で使用できるテーブル値パラメーター (TVP) オブジェクトはありませんが、SQL Server 接続で生の SQL ステートメントを実行できます。解決策は次のとおりです。
- TVP を使用する SQL ステートメントを作成する
- ADO 接続で SQL ステートメントを実行します。
例えば:
Dim cnSQLServer As ADODB.Connection
Dim rst As ADODB.Recordset
Dim strSQL As String
Set cnSQLServer = New ADODB.Connection
cnSQLServer.Open "Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;Integrated Security = SSPI"
' Build a SQL statement that uses a TVP
strSQL = "DECLARE @ReturnMessage nvarchar(255) " + _
"DECLARE @catType CategoryTableType " + _
"INSERT INTO @catType" + _
"EXEC ('" + _
"SELECT ''Organic'', ''Organically grown produce and grains'' " + _
"SELECT ''Conventional'', ''Non-organically grown produce and grains'' " + _
"SELECT ''Irish'', ''Mrs. O''''Leary''''s creamery products'' " + _
"') " + _
"EXEC dbo.usp_InsertCategory @catType, @ReturnMessage OUTPUT; " + _
"SELECT @ReturnMessage as ReturnMessage'"
' Execute the SQL statement on the ADO connection.
Set rst = cnSQLServer.Execute(strSQL)
このソリューションについては、MS Access からの TVP の呼び出しに関する記事で詳しく説明しています: Access 2007 での SQL Server 2008 テーブル値パラメーターの使用
TVP を使用すると、パフォーマンスが大幅に向上しました。これが他の誰かに役立つことを願っています。乾杯。