【问题标题】:INSERT IGNORE and ON DUPLICATE KEY UPDATE not working in SQL Server 2008 R2INSERT IGNORE 和 ON DUPLICATE KEY UPDATE 在 SQL Server 2008 R2 中不起作用
【发布时间】:2012-01-13 17:54:39
【问题描述】:

我正在尝试将一些数据从 MS-Access 文件导入我的 SQL Server 数据库。由于某些数据重叠,我不断收到主键错误。因此我尝试使用ON DUPLICATE KEY UPDATEINSERT IGNORE。当我遇到语法错误时,我的 SQL Server(运行 2008 R2)似乎都不知道这两者。我是否需要一些附加库或者INSERT IGNOREON DUPLICATE KEY 在使用选择查询插入.mdb 时不可用?这是sn-p的代码:

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 KEY UPDATE 的特定权限或属性吗?

标签: sql-server-2008 insert duplicates key


【解决方案1】:

SQL Server 不支持INSERT IGNOREON DUPLICATE。该语法特定于 MySQL。

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

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

使用选择查询插入 .mdb 时

我不明白那部分。如果您有 SQL Server,那么您不是“插入 .mdb”。
您可能正在运行 MS Access 吗?在这种情况下,据我所知,MERGE 也不起作用(您需要查看 MS Access 手册以获取等效声明)

【讨论】:

  • 谢谢,我会尝试 MERGE。在回答您的问题时,不,我没有插入 .mdb。我的意思是 SELECT 查询正在从我的 .mdb 文件中选择数据以导入 SQL SERVER。
  • 那么 MERGE 将不起作用。如果我没记错的话,MERGE 不会跨数据库。
  • 嗯。所以没有什么可以让我从 .mdb 插入数据但跳过/忽略重复项?我发现我不能像 Jani 建议的那样禁用主键,这可能是最好的。
  • 我认为最好的方法是将数据复制到 SQL Server 中的临时表中,然后使用 MERGE 语句将行获取到真实表中。
【解决方案2】:

不确定这是否得到解决,但在 sql server 中完成“插入忽略”的一种方法是在为表的一组列创建唯一索引时选中“忽略重复项”框。当你这样做时,SQLServer 不会抛出异常,只是一个警告,所以如果你使用这样的索引批量插入,那么它将忽略你的欺骗。 这样做的问题是,如果在批量插入时有大量行(数百万或更多)在表上有索引,则会更慢。

【讨论】:

    猜你喜欢
    • 2010-10-07
    • 2015-07-30
    • 2023-02-06
    • 1970-01-01
    • 2020-07-20
    • 2011-02-12
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    相关资源
    最近更新 更多