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