2013-06-07 3 views
0

У меня есть таблица с миллионами записей SQL DB. Я хочу вставить запись, если новая не является дубликатной записью. Но я не хочу проверять, существует ли повторяющаяся запись. Есть ли способ вставить напрямую, и если существует повторяющаяся запись, просто игнорируйте новую вставку?SQL Server Вставка без дубликата

+1

проверить утверждение MERGE: http://technet.microsoft.com/en-us/library/bb510625.aspx –

+0

Возможный дубликат [Решения для INSERT или UPDATE на SQL Server] (http://stackoverflow.com/questions/108403/solutions-for-insert-or-update-on-sql-server) –

+0

А также другие: http://stackoverflow.com/questions/9638185/insert-into-ignore-duplicates-that-are-not- первичный ключ, http://stackoverflow.com/questions/8854997/insert-ignore-and-on-duplicate-key-update-not-working-in-sql-server-2008-r2 и т. д. –

ответ

1

Вы могли бы добиться того, что вы хотите, применяя UNIQUE INDEX на стол и указав IGNORE_DUP_KEY ON:

Определяет реакцию на ошибку, когда операция вставки пытается вставить повторяющиеся значения ключа в уникальный индекс. Опция IGNORE_DUP_KEY применяется только для операций вставки после того, как индекс создан или перестроен. Опция не действует при выполнении CREATE INDEX, ALTER INDEX или UPDATE. По умолчанию OFF.

ON

будет происходить предупреждающее сообщение, когда повторяющиеся ключевые значения вставляются в уникальный индекс. Только строки, нарушающие ограничение уникальности, потерпят неудачу.

Таким образом, вставка будет успешной для новых уникальных строк, но вы не можете избежать предупреждения.


Вы бы создать этот показатель во всех колонках, с помощью которого вы определяете уникальность/дубликаты - которые могут или не могут быть все столбцы в таблице - вы не дали нам определение для работы.

1

Если вы вставляете запись из Table

INSERT INTO INSERT_TABLE_NAME 
(.....) 
SELECT 
(.....) 
FROM TABLE_NAME T1 
INNER JOIN INSERT_TABLE_NAME T2 
ON T1.COLUMN_NAME1<>T2.COLUMN_NAME1 
OR T1.COLUMN_NAME2<>T2.COLUMN_NAME2 
OR ... 

Если вы вставляете запись по values

INSERT INTO INSERT_TABLE_NAME 
(.....) 
VALUES 
(.....) 
WHERE 
ON VALUE1<>T2.COLUMN_NAME1 
OR VALUE2<>T2.COLUMN_NAME2 

мое решение подходит только когда колонна в вас таблице в разумное число.

Ofcouse @Damien_The_Unbeliever дал лучшее решение. Но вы не сможете его реализовать. После некоторого момента.

Смежные вопросы