将数据从ODBC连接复制到本地数据库

问题描述:

我想从我们的MS SQL服务器上的ODBC连接数据库创建表的缓存副本。我们目前直接从几个Excel表连接到ODBC连接并运行查询。他们需要大约1 - 2分钟才能完成,并且每天运行数次,可以快速加起来。因此,为了尝试解决这个问题,我从ODBC连接复制了一对表并运行查询,大约需要11秒。我想创建一个表格副本并每隔一小时更新一次。但我只想更新已更改的表和行以尝试并保持服务器负载不变。我想做一个存储过程。我不是很好的SQL,并想知道如果有一个半简单的方法来做到这一点将数据从ODBC连接复制到本地数据库

您可以编写运行您的查询,只是修改它微微地输出到一个物理表的存储过程。

例如:

select a.FirstName, a.LastName, b.City, b.State, b.zip into _temp_report 
from customers a join addresses b on a.customer_id = b.customer_id 

在上面的例子中,成_temp_report部分是重要的部分。它将创建一个包含查询结果的新物理表。

然后您可以简单地将报告指向该表。

您可以使用SQL Server代理创建按计划运行存储过程的作业。

显然需要增加一些逻辑,以消除对存储过程的每次运行的_temp_report表,所以你不要试图给每个作业运行时间重新创建它。

+0

这只是复制表格的权利?它不添加更改的行?我缓存的数据库大小约为200mb,运行完整缓存查询大约需要20分钟。我想只选择已添加的表中的行。我知道我将如何在C#或VB中做到这一点,但我不想为服务器创建另一项服务。我宁愿它是一个存储过程,我可以定期运行 – Rocky3598

+0

我写的虚假查询将存储在一个存储过程中。它不仅仅是复制表格。它运行你的查询需要20分钟(顺便说一下,200mb的20分钟是非常令人惊讶的,我敢打赌,增加索引和其他一些小小的调整会花费这段时间),并将其输出到临时表中。您可以修改查询以仅考虑最近更新/添加的行。最大的想法/要点是你可以运行一个存储过程,该存储过程只在存储过程的查询中创建一个新的表。 – ryan1234

+0

这样做更有意义。不幸的是,我不能将索引添加到数据库中,因为它是我们会计软件(Peachtree/Sage 50)的只读数据库, – Rocky3598