INSERT IGNORE и ON DUPLICATE KEY UPDATE не работают в SQL Server 2008 R2 - PullRequest
0 голосов
/ 13 января 2012

Я пытаюсь импортировать некоторые данные из файла 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 SECTION\Modeling & Gauging\PCBase2\PCBASE2 Files.mdb')...RUMN3 

ON DUPLICATE KEY UPDATE STATION_ID=STATION_ID

Вот результат анализа:

Сообщение 156, Уровень 15, Состояние 1, Строка 3
Неверный синтаксис рядом с ключевым словом «ON».

Ответы [ 2 ]

4 голосов
/ 13 января 2012

SQL Server не поддерживает INSERT IGNORE или ON DUPLICATE. Этот синтаксис специфичен для MySQL.

Если бы вы посмотрели оператор INSERT в руководстве по SQL Server , вы бы это увидели.

Вам нужно использовать оператор MERGE для обновления или вставки.

при вставке с запросом выбора в .mdb

Я не понимаю эту часть. Если у вас есть SQL Server, вы не « вставляете в .mdb ».
Возможно, вместо этого вы используете MS Access? В этом случае MERGE не будет работать, насколько я знаю (вам нужно проверить руководство для MS Access для эквивалентного утверждения)

0 голосов
/ 08 декабря 2013

не уверен, что это решено, но один из способов выполнить «вставить игнорирование» на сервере sql - установить флажок «игнорировать дубликаты» при создании уникального индекса для набора столбцов для таблицы.Когда вы сделаете это, SQLServer не выдаст исключение, а только предупреждение, поэтому, если вы выполните массовую вставку с таким индексом, он будет игнорировать ошибки для вас.Проблема в том, что если у вас TON строк (10 миллионов или более) с индексом в таблице, то при массовой вставке будет медленнее.

...