Вставить в игнорировать дубликаты, которые не являются первичными ключами - PullRequest
1 голос
/ 09 марта 2012

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

    INSERT INTO table (txtLastName,txtEmail,txtZip)
    Values ('Tester','test@test.com','12345')
    WHERE txtLastName <> 'Tester'
    or WHERE txtEmail <> 'test@test.com'
    or WHERE txtZip <> '12345'

Использование MS SQL Server.

Ответы [ 2 ]

4 голосов
/ 09 марта 2012

Вы должны создать Unique Constraint, состоящий из трех полей (txtLastName, txtEmail, txtZip).

Ссылки ведут вас к документам SQL Server,но концепция уникального ограничения универсальна для СУБД.

Просто имейте в виду, что при создании уникального ограничения ваша дублирующаяся вставка не просто молча завершится ошибкой: она выдаст ошибку, сообщающую, что вставка пыталась нарушить уникальное ограничение.И, конечно, это должно быть сделано!Убедитесь, что ваш код обрабатывает это исключение.

1 голос
/ 09 марта 2012

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

INSERT INTO table (txtLastName,txtEmail,txtZip) 
SELECT 'Tester','test@test.com','12345'
WHERE NOT EXISTS (SELECT *
                    FROM table
                   WHERE txtLastName = 'Tester' 
                     AND txtEmail = 'test@test.com' 
                     AND txtZip = '12345' 
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...