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



我正试图将一些数据从MS Access文件导入我的SQL Server数据库。由于某些数据重叠,我不断收到主键错误。因此,我尝试使用ON DUPLICATE KEY UPDATEINSERT IGNORE。对于我的SQL Server(运行2008 R2)来说,这两者似乎都是未知的,因为我遇到了语法错误。我是否需要一些加载项库,或者INSERT IGNOREON DUPLICATE KEY在与选择查询一起插入.mdb时不可用?以下是代码片段:

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 SECTIONModeling & GaugingPCBase2PCBASE2 Files.mdb')...RUMN3 
ON DUPLICATE KEY UPDATE STATION_ID=STATION_ID

以下是解析结果:

消息156,级别15,状态1,第3行
关键字"ON"附近的语法不正确。

SQL Server不支持INSERT IGNOREON DUPLICATE。这种语法是MySQL特有的。

如果您在SQL Server手册中查找INSERT语句,就会看到它。

您需要使用MERGE语句来更新或插入。

使用选择查询插入.mdb 时

我不明白那部分。如果您有SQL Server,则不会"插入.mdb"。
您是否正在运行MS Access?在这种情况下,据我所知,MERGE也不会工作(您需要查看MS Access的手册以获得等效语句)

不确定这个问题是否得到了解决,但在sql server中实现"insert ignore"的一种方法是在为表的一组列创建唯一索引时选中"ignore duplicates"框。当你这样做的时候,SQLServer不会抛出异常,只是一个警告,所以如果你用这样的索引进行大容量插入,那么它会为你忽略重复。这样做的问题是,如果你有一吨行(千万或更多)在表上有索引,那么大容量插入的速度会慢一些。

最新更新