Reputation: 3874
I have a windows service which basically watches a folder for any CSV file. Each record in the CSV file is inserted into a SQL table. If the same CSV file is put in that folder, it can lead to duplicate record entries in the table. How can I avoid duplicate insertions into the SQL table?
Upvotes: 0
Views: 1062
Reputation: 634
Problems with the answers using WHERE NOT EXISTS are:
table
(a = @a OR (a IS NULL AND @a IS NULL))
.
Repeat that for 10 columns and viola - you hate SQL :)A better answer would take into account the great SET processing capabilities that relational databases provide (in short -- never use row-by-row processing in SQL if you can avoid it. If you can't -- think again and avoid it anyway).
So for the answer:
INSERT INTO table (<columns>)
select <columns> from #temptab
EXCEPT
select <columns> from table
Keep in mind that the EXCEPT is safely dealing with NULLs for every kind of column ;) as well as choosing a high-performance join type for matching (hash, loop, merge join) depending on the available indexes and table statistics.
Upvotes: 0
Reputation: 66
The accepted answer has a syntax error and is not compatible with relational databases like MySQL.
Specifically, the following is not compatible with most databases:
values(...) where not exists
While the following is generic SQL, and is compatible with all databases:
select ... where not exists
Given that, if you want to insert a single record into a table after checking if it already exists, you can do a simple select
with a where not exists
clause as part of your insert
statement, like this:
INSERT
INTO table_name (
primay_col,
col_1,
col_2
)
SELECT 1234,
'val_1',
'val_2'
WHERE NOT EXISTS (
SELECT 1
FROM table_name
WHERE primary_col=1234
);
Simply pass all values with the select
keyword, and put the primary or unique key condition in the where
clause.
Upvotes: 1
Reputation: 5843
Try INSERT WHERE NOT EXISTS
, where a
, b
and c
are relevant columns, @a
, @b
and @c
are relevant values.
INSERT INTO table
(
a,
b,
c
)
VALUES
(
@a,
@b,
@c
)
WHERE NOT EXISTS
(
SELECT 0 FROM table WHERE a = @a, b = @b, c = @c
)
Upvotes: 1