2015-02-02 2 views
0

Мне нужен запрос для добавления записи данных в таблицу. Я хотел бы заранее проверить, существует ли запись, которая должна быть вставлена ​​в таблицу, уже существует. Вот мой код (он работает):mssql-statement, чтобы добавить запись в таблицу с проверкой на наличие дубликатов

INSERT INTO table1(field1, field2) 
    SELECT 'value1', 'value2' 
    FROM table1 
    WHERE NOT EXISTS (SELECT * 
         FROM table1 
         WHERE field1 = 'value1' 
          AND field2 = 'value2') 
    GROUP BY 'value1', 'value2' 

Я считаю, что мой код не очень эффективен. Возможно, есть лучшее утверждение, чтобы достичь того же результата?

+0

группировка подзапроса, чтобы получить только один ответ – rushifell

+0

Я хочу использовать этот оператор в vb.net-программе. строковые литералы 'value1' и 'value2' будут заменены во время выполнения. i среда доступа я могу запустить этот оператор как действительный оператор. и это работает для меня. – rushifell

+0

Доступ? или SQL-SERVER? –

ответ

0

Прежде всего, вам нужно dont't группировка здесь все

if not exists(select * from table1 where field1='value1' and field2='value2') 
insert into table1 values('value1', 'value2') 

Во-вторых вы можете добавить уникальный индекс для этих 2 колонки, и SQL будет делать эту работу вместо вас:

CREATE UNIQUE NONCLUSTERED INDEX [IX_table1] ON [dbo].[table1] 
(
    [field1] ASC, 
    [field2] ASC 
) 

В обоих случаях я бы рекомендовал добавить индекс на эти 2 столбца.

+0

, если я НЕ группирую, добавляет несколько записей. это не то, что я хочу. – rushifell

+0

Тогда вы задали неправильный вопрос. Вы выбираете из таблицы 1 и вставляете одинаковые значения в таблицу1. В этом сценарии всегда будут дубликаты. Также вы группируете значения? Это синтаксическая ошибка –

+0

заявление в моем посте отлично работает без дубликатов. – rushifell

0
;with src as 
(
    select distinct 
     field1 = 'value1', 
     field2 = 'value2' 
    from table1 
) 
insert into Table1(Field1,Field1) 
select s.Field1, s.Field2 
from src s 
left outer join table1 d --dest 
    on s.Field1 = d.Field1 
     and s.Field2 = d.Field2 
where d.Field1 is null 
Смежные вопросы