繁体   English   中英

将MERGE与MS-Access和SQL Server 2008一起使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM