Tar*_*zan 2 excel vba excel-vba table-valued-parameters sql-server-2008-r2
我正在开发一个从Excel到SQL Server 2008 R2执行CRUD操作的财务应用程序.该应用程序使用VBA和ADO.我试图优化循环数千行的操作的性能,并将更新发送到数据库.目前,每行调用一次存储过程.
当用户与应用程序的连接速度较慢时,性能也很慢,足以让他们开始抱怨.为了优化性能,我试过:
我的事情已经不多了.从VBA转到SQL Server 2008 R2时,如何提高数据库性能?
我想到了.虽然ADO中没有可用的表值参数(TVP)对象,但您可以在SQL Server连接上执行原始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)
Run Code Online (Sandbox Code Playgroud)
在有关从MS Access调用TVP的文章中更详细地描述了该解决方案:在Access 2007中使用SQL Server 2008表值参数
使用TVP给我带来了不错的性能提升.希望这有助于其他人.干杯.
归档时间: |
|
查看次数: |
2474 次 |
最近记录: |