2016-05-11 197 views
1

最近我發佈了question,它包含一些語法錯誤,現在代碼運行時沒有錯誤,這要歸功於@Arulkumar。如何避免數據重複插入?

但是現在我面臨另一個問題,Excel表格中的數據正確地存儲到SQL Server數據庫中,但是當我按下刷新按鈕或者如果我在應用程序中再次訪問該鏈接時,數據在數據庫中重複。又意味着它從Excel中檢索值並將相同的數據再次存儲在數據庫中。

如何避免數據重複。任何人都可以幫我解決這個問題嗎?代碼和excel表單示例在上面提到的鏈接中。

回答

1

你需要MERGE語句

request.query('MERGE [mytable] as target USING (SELECT SalesPersonID, TerritoryID FROM OPENROWSET(' + 
     '\'Microsoft.ACE.OLEDB.12.0\', \'Excel 12.0;Database=D:\\sample\\test\\data\\1540_OPENROWSET_Examples.xls;HDR=YES\', ' + 
     '\'SELECT SalesPersonID, TerritoryID FROM [SELECT_Example$]\')' + 
     ') as source' + 
     ' ON target.SalesPersonID = source.SalesPersonID' + 
     ' WHEN MATCHED THEN UPDATE SET TerritoryID = source.TerritoryID' + 
     ' WHEN NOT MATCHED THEN INSERT (SalesPersonID, TerritoryID) VALUES (source.SalesPersonID, source.TerritoryID);' 
     ,function(err,recordset){ 
    if(err) console.log(err) 

它將更新TerritoryID如果已使用相同的SalesPersonID行和插入行如果沒有匹配的mytable

如果你需要加入兩個領域改變這種:

ON target.SalesPersonID = source.SalesPersonID 

在此:

ON target.SalesPersonID = source.SalesPersonID AND target.TerritoryID = source.TerritoryID 

而在這之後 - 刪除此字符串,因爲它不需要了:

'WHEN MATCHED THEN UPDATE SET TerritoryID = source.TerritoryID' + 
+0

嗨,謝謝你回答逐行解釋,我試着運行代碼,它給出了一些語法錯誤: – naik3

+0

'{ [RequestError:關鍵字 '爲' 附近的語法不正確。] 名: 'RequestError', 消息: '附近的關鍵字\語法錯誤' 作爲\, 代碼 '': 'EREQUEST', 號:156, LINENUMBER:1, 類:15, 服務器名稱: '本地主機\\ SQLEXPRESS', PROCNAME: '', precedingErrors: [{[RequestError:附近有語法錯誤('] 名: 'RequestError', message:'Incorrect syntax near \'(\'。', code:'EREQUEST', number:102, lineNumber:1, state:1, class:15, serverName:'localhost \\ SQLEXPRESS', procName:''}]}' – naik3

+0

給我一分鐘,我搞砸了代碼格式! – gofr1