2012-01-13 99 views
0

我試圖從MS-Access文件導入一些數據到我的SQL Server數據庫。我不斷收到主鍵錯誤,因爲有些數據有重疊。因此我嘗試使用ON DUPLICATE KEY UPDATE以及INSERT IGNORE。我的SQL Server(運行2008 R2)似乎都不知道,因爲我得到語法錯誤。我是否需要一些附加庫或INSERT IGNOREON DUPLICATE KEY在向.mdb插入選擇查詢時不可用?下面的代碼片段:INSERT IGNORE和ON DUPLICATE KEY UPDATE在SQL Server 2008 R2中不起作用

INSERT INTO XCManager.XC_DATA1 (STATION_ID, SENSORNAME, TIME_TAG, ORIG_VALUE, ED_VALUE, SOURCE) 
    SELECT STATION_ID, SENSORNAME, TIME_TAG, ORIG_VALUE, ED_VALUE, SOURCE 
    FROM OPENDATASOURCE ('Microsoft.Jet.OLEDB.4.0', 
'Data Source=H:\OPERATIONS & MAINTENANCE SECTION\Modeling & Gauging\PCBase2\PCBASE2 Files.mdb')...RUMN3 

ON DUPLICATE KEY UPDATE STATION_ID=STATION_ID 

這裏的解析結果:

消息156,15級,狀態1,第3行
'ON' 的關鍵字附近有語法錯誤。

+0

您可以更改Sql Server架構嗎? – 2012-01-13 17:56:34

+0

在模式中,我應該尋找允許使用INSERT IGNORE或ON DUPLICATE KEY UPDATE的特定權限或屬性嗎? – jaker 2012-01-13 18:11:25

回答

4

SQL Server不支持INSERT IGNOREON DUPLICATE。該語法特定於MySQL。

如果您查閱了SQL Server manual中的INSERT聲明,您會看到這一點。

您需要使用MERGE語句才能更新或插入。

與選擇查詢插入到的.mdb

我不明白,這部分的時候。如果你有SQL Server,你不是「插入.mdb」。
你可能會運行MS Access嗎?在這種情況下,據我所知MERGE將無法​​工作(您需要查看MS Access的手冊以獲得等效的聲明)

+0

謝謝我會嘗試MERGE。在回答你的問題時,我不會插入到.mdb中。我的意思是SELECT查詢從我的.mdb文件中選擇數據導入到SQL SERVER中。 – jaker 2012-01-13 20:04:50

+0

然後,MERGE將不起作用。如果我沒有弄錯,MERGE不會跨越數據庫。 – 2012-01-13 20:12:00

+0

嗯。所以沒有什麼能夠讓我從.mdb插入數據,但跳過/忽略重複?我發現我不能像Jani建議的那樣禁用主鍵,這可能是最好的。 – jaker 2012-01-13 20:28:52

0

不確定是否得到解決,但有一種方法可以完成「插入忽略」在sql server中,當在表的一組列上創建唯一索引時,檢查「忽略重複項」框。當你這樣做時,SQLServer不會拋出異常,只是一個警告,所以如果你用這樣的索引批量插入,那麼它會忽略你的愚蠢。 這樣做的麻煩是,如果你有一個TON的行(10億或更多)在桌面上有一個索引,因爲你批量插入會更慢。

相關問題