【发布时间】:2012-12-17 07:32:04
【问题描述】:
我正在开发一个财务应用程序,该应用程序执行从 Excel 到 SQL Server 2008 R2 的 CRUD 操作。该应用程序使用 VBA 和 ADO。我正在尝试优化循环数千行并将更新发送到数据库的操作的性能。目前,存储过程每行调用一次。
当用户与应用程序的连接速度很慢时,性能也会变慢,足以让他们开始抱怨。为了优化性能,我尝试了:
- 将所有操作批处理到一个 XML 文件中并一次性发送。不幸的是,性能变得更糟了。
- 接下来,我想到了将所有更新批处理到一个表值参数中。但是,VBA 和 ADO 不能使用表值参数。
我要尝试的东西已经不多了。从 VBA 转到 SQL Server 2008 R2 时如何提高数据库性能?
【问题讨论】:
-
从 VBA 转到 SQL Server 是什么意思? VBA 是一种编程语言,SQL Server 是一种 DBMS。这些是完全不同的东西。
-
客户端是VBA写的,SQL Server是数据库。
-
你能告诉我们VBA代码吗?
-
尽量避免对数据库进行大量往返。也许将您的数据加载到 SQL Server 中的临时表中,然后针对整个批次运行您的 SP。逐行处理非常慢 - 以集合的形式处理数据,您将获得更好的性能。
-
@LordPeter:将数据加载到临时表中仍然需要多次往返并且仍然很慢(尽管它可能比这更快)。这是一个常见的性能问题,问题首先在于将数据导入 SqlServer。一旦进入,就有许多高性能选项。但是要从客户端应用程序中获取数据,实际上只有一个高性能选项,那就是
SqlBulkCopy(),它仅在 ADO.net 中可用,在 ADODB(即 COM)中不可用。
标签: excel sql-server-2008-r2 table-valued-parameters vba