我想到了。虽然 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 给了我很好的性能提升。希望这对其他人有帮助。干杯。