INSERT IGNORE和ON DUPLICATE KEY UPDATE在SQL Server 2008 R2中不起作用

问题描述:

我试图从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

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

不确定是否得到解决,但有一种方法可以完成“插入忽略”在sql server中,当在表的一组列上创建唯一索引时,检查“忽略重复项”框。当你这样做时,SQLServer不会抛出异常,只是一个警告,所以如果你用这样的索引批量插入,那么它会忽略你的愚蠢。 这样做的麻烦是,如果你有一个TON的行(10亿或更多)在桌面上有一个索引,因为你批量插入会更慢。