簡體   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