[英]Using MERGE with MS-Access and SQL Server 2008
所以我真的对编码或SQL一点也不了解。 我习惯于使用它,但不是专业人士或资深人士。 我有来自服务器的数据,我使用查询来添加本地数据库信息。 将数据分组在一起后,我需要将其上传回SQL Server。
存取表: table1
serial# cust# cust_name order# model#
SQL Server表: dbo_Data1
serial# cust# cust_name order# model#
我在SQL Server中拥有除order#
和model#
所有内容,并且可以在Access中找到所有信息。 我只需要将Access表上传到SQL Server。 我一直在读, MERGE
是最好的方法,而且是分批进行的,但是我不知道该怎么做。 我是否使用SQL视图编写查询并使用此http://technet.microsoft.com/zh-cn/library/bb510625.aspx格式? 只是忽略访问更新/ maketable /追加查询类型?
另外,我不能只删除旧数据,因为我想避免从1998年开始为更新而提取数据,并且需要将该数据保留在服务器上。 同样,执行此更新的旧方法是仅使用Access附加查询,如果每周执行一次,则该查询可能要花费10个小时(并且在良好的一年中还没有完成)。 我想避免10个小时的更新,因为我一天只工作8个小时,并且没有一台额外的计算机可以让我在Access工作期间保持忙碌状态。
谁能为我阐明一下? 我的主要问题是MERGE
如何工作?
谢谢。
MERGE
是Transact-SQL的功能,因此,如果要使用它,则必须在Access中运行通过查询。 这是您要执行的操作:
假设您在SQL Server上具有一个“主” [ExchangeRates]表,其中包含以下数据:
CurrencyName CanadianDollarEquivalent
------------- ------------------------
European Euro 1.3729
U. S. Dollar 1
您在SQL Server上还有一个名为[ExchangeRateUpdates]的表,该表具有相同的结构。 您已在Access中将该表定义为名为[dbo_ExchangeRateUpdates]的链接表。
您在Access中还具有一个名为[LocalTable]的本地工作表,该表也具有相同的结构。 假设经过一堆“数字运算”后,您确定要应用于服务器上“主”表的更新是:
您想更新“美元”汇率,因为这两种货币已不再面值,并且
您想添加澳元汇率
因此,在完成本地所需的任何处理(为了达到最大速度)之后,您的[LocalTable]将包含
CurrencyName CanadianDollarEquivalent
----------------- ------------------------
U. S. Dollar 1.047
Australian Dollar 0.9622
您可以通过在Access中运行三个查询将这些更改合并到SQL Server的主表中:
查询1:删除查询以清空[ExchangeRateUpdates]表中以前的所有更新
DELETE FROM dbo_ExchangeRateUpdates;
查询2:一个追加查询,用于将当前更新上传到[ExchangeRateUpdates]表
INSERT INTO dbo_ExchangeRateUpdates
SELECT * FROM LocalTable;
查询3:通过查询将[ExchangeRateUpdates]表中的更新合并到SQL Server的“主” [ExchangeRates]表中
MERGE dbo.ExchangeRates AS target
USING dbo.ExchangeRateUpdates AS source
ON (target.CurrencyName = source.CurrencyName)
WHEN MATCHED THEN
UPDATE SET CanadianDollarEquivalent = source.CanadianDollarEquivalent
WHEN NOT MATCHED THEN
INSERT (CurrencyName, CanadianDollarEquivalent)
VALUES (source.CurrencyName, source.CanadianDollarEquivalent);
(注意:在定义传递查询时,请确保将其Returns Records
属性设置为No
)
完成后,“主” [ExchangeRates]表将包含
CurrencyName CanadianDollarEquivalent
----------------- ------------------------
European Euro 1.3729
U. S. Dollar 1.047
Australian Dollar 0.9622
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.