Вставьте записи, если они не существуют SQL Server 2005

База данных SQL Server 2005. У меня есть временная таблица со многими записями, эти записи поступают из RSS-канала, и их нужно периодически вставлять. Часть данных изменится, часть останется прежней. Мне нужно только вставить «новые» записи и исключить возможность вставки избыточных данных, что приведет к дублированию записей. Как мне это сделать?

Пример, tempTable,

        BEGIN
            INSERT INTO myTable
                (
                    row1
                    ,row2
                    ,row3
                )
            SELECT
                row1
                ,row2
                ,row3
            FROM @tempTable
        END

person Timothy    schedule 21.02.2011    source источник


Ответы (2)


Один из способов — подзапрос not exists:

INSERT  myTable
        (row1, row2, row3)
SELECT  row1, row2, row3
FROM    @tempTable temp
WHERE   NOT EXISTS
        (
        SELECT  *
        FROM    myTable
        WHERE   row1 = temp.row1
                and row2 = temp.row2
                and row3 = temp.row3
        )
person Andomar    schedule 21.02.2011
comment
Отлично, это именно то решение, которое я искал. Большое спасибо. У меня есть еще 1 вопрос. Что делать, если порядок строк не имеет значения? Должен ли я исчерпать все перестановки в предложении where? Например. Где row1 = temp.row1 или row1 = temp.row2 или row1 = temp.row3? - person Timothy; 21.02.2011
comment
@ Тимоти: Да, но лучше было бы нормализовать таблицу. - person Andomar; 21.02.2011
comment
@Timothy: На самом деле нет. Сравнение заключается в том, чтобы определить, существует ли уже строка таблицы (а не столбцы с именами row1, row2, row3 и т. д.), содержащая данные, которые вы хотите вставить. - person ; 17.10.2011

Попробуй это:

con.Open();
SqlCommand cmd = new SqlCommand("If Not Exists(select * from stholidays where holiday='"+ dd + "') begin insert into stholidays values('" + dateTimePicker12.Text + "','" + dateTimePicker20.Text + "','" + dateTimePicker13.Text + "','" + mbk + "','" + dateTimePicker14.Text + "','" + dateTimePicker15.Text + "','" + lt + "','" + dateTimePicker16.Text + "','" + dateTimePicker17.Text + "','" + ebk + "','" + dateTimePicker18.Text + "','" + dateTimePicker19.Text + "','" + textBox105.Text + "','" + textBox106.Text + "','" + textBox107.Text + "','" + dd + "','" + textBox104.Text + "')end", con);
cmd.ExecuteNonQuery();
con.Close();
person LakshmijiV    schedule 27.02.2013