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 IGNORE
和ON 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' 的关键字附近有语法错误。
SQL Server不支持INSERT IGNORE
或ON DUPLICATE
。该语法特定于MySQL。
如果您查阅了SQL Server manual中的INSERT
声明,您会看到这一点。
您需要使用MERGE
语句才能更新或插入。
与选择查询插入到的.mdb
我不明白,这部分的时候。如果你有SQL Server,你不是“插入.mdb”。
你可能会运行MS Access吗?在这种情况下,据我所知MERGE
将无法工作(您需要查看MS Access的手册以获得等效的声明)
不确定是否得到解决,但有一种方法可以完成“插入忽略”在sql server中,当在表的一组列上创建唯一索引时,检查“忽略重复项”框。当你这样做时,SQLServer不会抛出异常,只是一个警告,所以如果你用这样的索引批量插入,那么它会忽略你的愚蠢。 这样做的麻烦是,如果你有一个TON的行(10亿或更多)在桌面上有一个索引,因为你批量插入会更慢。
您可以更改Sql Server架构吗? – 2012-01-13 17:56:34
在模式中,我应该寻找允许使用INSERT IGNORE或ON DUPLICATE KEY UPDATE的特定权限或属性吗? – jaker 2012-01-13 18:11:25