I want to insert some people into a user table using:
INSERT INTO [MyTable] (col2, col3) VALUES ('Jim', 'Bob'), ('Stinky', 'Pete'), ('Old', 'Frank')
I don’t want those entries entered if they already exist (there is an ID column, but the uniqueness here should be dictated by a composite of those two columns.
If I was selecting these values from a table I could use (I think):
INSERT INTO [MyTable] (col2, col3) SELECT [Name1], [Name2] FROM [ExistingTable] EXCEPT SELECT [col2], [col3] FROM [MyTable]
So how can I do this EXCEPT
clause when my data isn’t in a table already?
Advertisement
Answer
First, you should have the database validate uniqueness:
create unique index unq_mytable_id on mytable(id);
This is not needed if id
is already declared as a primary key — which, presumably, it should be.
Then, you can just include a list using values()
:
INSERT INTO [MyTable] (col2, col3) SELECT v.* FROM (VALUES ('Jim','Bob'), ('Stinky','Pete'), ('Old','Frank') ) v(col2, col3) EXCEPT SELECT col2, col3 FROM mytable;
Of course, NOT EXISTS
also works, but this is closer to your original query.