powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / MSSQL, Уникальный индекс по двум полям, обработка Insert
7 сообщений из 7, страница 1 из 1
MSSQL, Уникальный индекс по двум полям, обработка Insert
    #36990634
NYMEZIDE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица справочников (Dics) и таблица типа Справочника (TypeDics).

Нас интересует только таблица справочников (Dics).

Поля таблицы Dics:
DicID int
Word varchar
P_TypeDics int

DicID - первичный ключ (автоинкрементный)
Word + P_TypeDics = Уникальный индекс по двум полям.

Каким способом обеспечить обработку Insert в эту таблицу ? Задача в том чтобы только добавлять данные. Обновления как такового нет и не будет. Идет только добавления множества слов и таблицу.
И при этом не выдавать никаких ИСКЛЮЧИТЕЛЬНЫХ сообщений пользователю.
Сейчас при вставке одинакового Word + P_TypeDics возникает исключение (Повторяющееся значение ключа).

Вижу 2 варианта:
1. Написать триггер на вставку и обрабатывать.
2. Написать хранимую процедуру и обрабатывать вставку только уникальных полей. Повторяющиеся пропускать.

Какой более оптимальный? Или может есть третий способ?
...
Рейтинг: 0 / 0
MSSQL, Уникальный индекс по двум полям, обработка Insert
    #36990655
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NYMEZIDEВижу 2 варианта:
1. Написать триггер на вставку и обрабатывать.
2. Написать хранимую процедуру и обрабатывать вставку только уникальных полей. Повторяющиеся пропускать.

Какой более оптимальный? Или может есть третий способ?Третий вариант - использовать опцию IGNORE_DUP_KEY = { ON | OFF }

BOLОпределяет ответ на ошибку, случающуюся, когда операция вставки пытается вставить в уникальный индекс повторяющиеся значения ключа. Параметр IGNORE_DUP_KEY применяется только к операциям вставки, производимым после создания или перестроения индекса. Параметр не работает во время выполнения инструкции CREATE INDEX, ALTER INDEX или UPDATE. Значение по умолчанию — OFF.

ON
Если в уникальный индекс вставляются повторяющиеся значения ключа, выводится предупреждающее сообщение. С ошибкой завершаются только строки, нарушающие ограничение уникальности.

OFF
Если в уникальный индекс вставляются повторяющиеся значения ключа, выводится сообщение об ошибке. Будет выполнен откат всей операции INSERT.
...
Рейтинг: 0 / 0
MSSQL, Уникальный индекс по двум полям, обработка Insert
    #36990828
baracs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NYMEZIDEВижу 2 варианта:
1. Написать триггер на вставку и обрабатывать.
2. Написать хранимую процедуру и обрабатывать вставку только уникальных полей. Повторяющиеся пропускать. Я бы выбрал второй.
Обработкой в процедуре можно управлять входными параметрами. Т.е. выбирать варианты обработки.
Например:
- просто пропускать дубли,
- складывать их в другую табличку для последующего анализа,
- посылать нафиг при наличии дублей,
- еще что-нибудь...
...
Рейтинг: 0 / 0
MSSQL, Уникальный индекс по двум полям, обработка Insert
    #36990850
NYMEZIDE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvgNYMEZIDEВижу 2 варианта:
1. Написать триггер на вставку и обрабатывать.
2. Написать хранимую процедуру и обрабатывать вставку только уникальных полей. Повторяющиеся пропускать.

Какой более оптимальный? Или может есть третий способ?Третий вариант - использовать опцию IGNORE_DUP_KEY = { ON | OFF }


Спасибо! Век живи - век учись!
...
Рейтинг: 0 / 0
MSSQL, Уникальный индекс по двум полям, обработка Insert
    #36990854
NYMEZIDE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
baracsЯ бы выбрал второй.
Обработкой в процедуре можно управлять входными параметрами. Т.е. выбирать варианты обработки.
Например:
- просто пропускать дубли,
- складывать их в другую табличку для последующего анализа,
- посылать нафиг при наличии дублей,
- еще что-нибудь...

Ну пока никаких дополнительных операция не требуется. Нужно просто пропускать их и не выдавать сообщений об ошибке - это пугает пользователей )
Если потребуется - то скорее всего напишу хранимку. Триггеры очень тяжеловесны для сервера.
...
Рейтинг: 0 / 0
MSSQL, Уникальный индекс по двум полям, обработка Insert
    #36990883
baracs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NYMEZIDEЕсли потребуется - то скорее всего напишу хранимку. И переделаю приложение на вызов этой хранимки...

Впрочем, вам конечно, виднее.
...
Рейтинг: 0 / 0
MSSQL, Уникальный индекс по двум полям, обработка Insert
    #36991295
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 02.12.2010 12:01, NYMEZIDE wrote:

> Ну пока никаких дополнительных операция не требуется. Нужно просто пропускать их
> и не выдавать сообщений об ошибке - это пугает пользователей )

Так можно было бы просто пропускать эти инсёрты и не выдавать сообщений об
ошибке. Даже без IGNORE_DUP_KEY.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / MSSQL, Уникальный индекс по двум полям, обработка Insert
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]