我正试图将一些数据从MS Access文件导入我的SQL Server数据库。由于某些数据重叠,我不断收到主键错误。因此,我尝试使用ON DUPLICATE KEY UPDATE
和INSERT IGNORE
。对于我的SQL Server(运行2008 R2)来说,这两者似乎都是未知的,因为我遇到了语法错误。我是否需要一些加载项库,或者INSERT IGNORE
和ON 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 IGNORE
或ON DUPLICATE
。这种语法是MySQL特有的。
如果您在SQL Server手册中查找INSERT
语句,就会看到它。
您需要使用MERGE
语句来更新或插入。
使用选择查询插入.mdb 时
我不明白那部分。如果您有SQL Server,则不会"插入.mdb"。
您是否正在运行MS Access?在这种情况下,据我所知,MERGE
也不会工作(您需要查看MS Access的手册以获得等效语句)
不确定这个问题是否得到了解决,但在sql server中实现"insert ignore"的一种方法是在为表的一组列创建唯一索引时选中"ignore duplicates"框。当你这样做的时候,SQLServer不会抛出异常,只是一个警告,所以如果你用这样的索引进行大容量插入,那么它会为你忽略重复。这样做的问题是,如果你有一吨行(千万或更多)在表上有索引,那么大容量插入的速度会慢一些。