|
|
|
MSSQL, Уникальный индекс по двум полям, обработка Insert
|
|||
|---|---|---|---|
|
#18+
Есть таблица справочников (Dics) и таблица типа Справочника (TypeDics). Нас интересует только таблица справочников (Dics). Поля таблицы Dics: DicID int Word varchar P_TypeDics int DicID - первичный ключ (автоинкрементный) Word + P_TypeDics = Уникальный индекс по двум полям. Каким способом обеспечить обработку Insert в эту таблицу ? Задача в том чтобы только добавлять данные. Обновления как такового нет и не будет. Идет только добавления множества слов и таблицу. И при этом не выдавать никаких ИСКЛЮЧИТЕЛЬНЫХ сообщений пользователю. Сейчас при вставке одинакового Word + P_TypeDics возникает исключение (Повторяющееся значение ключа). Вижу 2 варианта: 1. Написать триггер на вставку и обрабатывать. 2. Написать хранимую процедуру и обрабатывать вставку только уникальных полей. Повторяющиеся пропускать. Какой более оптимальный? Или может есть третий способ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2010, 10:32 |
|
||
|
MSSQL, Уникальный индекс по двум полям, обработка Insert
|
|||
|---|---|---|---|
|
#18+
NYMEZIDEВижу 2 варианта: 1. Написать триггер на вставку и обрабатывать. 2. Написать хранимую процедуру и обрабатывать вставку только уникальных полей. Повторяющиеся пропускать. Какой более оптимальный? Или может есть третий способ?Третий вариант - использовать опцию IGNORE_DUP_KEY = { ON | OFF } BOLОпределяет ответ на ошибку, случающуюся, когда операция вставки пытается вставить в уникальный индекс повторяющиеся значения ключа. Параметр IGNORE_DUP_KEY применяется только к операциям вставки, производимым после создания или перестроения индекса. Параметр не работает во время выполнения инструкции CREATE INDEX, ALTER INDEX или UPDATE. Значение по умолчанию — OFF. ON Если в уникальный индекс вставляются повторяющиеся значения ключа, выводится предупреждающее сообщение. С ошибкой завершаются только строки, нарушающие ограничение уникальности. OFF Если в уникальный индекс вставляются повторяющиеся значения ключа, выводится сообщение об ошибке. Будет выполнен откат всей операции INSERT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2010, 10:40 |
|
||
|
MSSQL, Уникальный индекс по двум полям, обработка Insert
|
|||
|---|---|---|---|
|
#18+
NYMEZIDEВижу 2 варианта: 1. Написать триггер на вставку и обрабатывать. 2. Написать хранимую процедуру и обрабатывать вставку только уникальных полей. Повторяющиеся пропускать. Я бы выбрал второй. Обработкой в процедуре можно управлять входными параметрами. Т.е. выбирать варианты обработки. Например: - просто пропускать дубли, - складывать их в другую табличку для последующего анализа, - посылать нафиг при наличии дублей, - еще что-нибудь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2010, 11:53 |
|
||
|
MSSQL, Уникальный индекс по двум полям, обработка Insert
|
|||
|---|---|---|---|
|
#18+
alexeyvgNYMEZIDEВижу 2 варианта: 1. Написать триггер на вставку и обрабатывать. 2. Написать хранимую процедуру и обрабатывать вставку только уникальных полей. Повторяющиеся пропускать. Какой более оптимальный? Или может есть третий способ?Третий вариант - использовать опцию IGNORE_DUP_KEY = { ON | OFF } Спасибо! Век живи - век учись! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2010, 11:59 |
|
||
|
MSSQL, Уникальный индекс по двум полям, обработка Insert
|
|||
|---|---|---|---|
|
#18+
baracsЯ бы выбрал второй. Обработкой в процедуре можно управлять входными параметрами. Т.е. выбирать варианты обработки. Например: - просто пропускать дубли, - складывать их в другую табличку для последующего анализа, - посылать нафиг при наличии дублей, - еще что-нибудь... Ну пока никаких дополнительных операция не требуется. Нужно просто пропускать их и не выдавать сообщений об ошибке - это пугает пользователей ) Если потребуется - то скорее всего напишу хранимку. Триггеры очень тяжеловесны для сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2010, 12:01 |
|
||
|
MSSQL, Уникальный индекс по двум полям, обработка Insert
|
|||
|---|---|---|---|
|
#18+
NYMEZIDEЕсли потребуется - то скорее всего напишу хранимку. И переделаю приложение на вызов этой хранимки... Впрочем, вам конечно, виднее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2010, 12:12 |
|
||
|
MSSQL, Уникальный индекс по двум полям, обработка Insert
|
|||
|---|---|---|---|
|
#18+
On 02.12.2010 12:01, NYMEZIDE wrote: > Ну пока никаких дополнительных операция не требуется. Нужно просто пропускать их > и не выдавать сообщений об ошибке - это пугает пользователей ) Так можно было бы просто пропускать эти инсёрты и не выдавать сообщений об ошибке. Даже без IGNORE_DUP_KEY. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2010, 14:32 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=67&tid=1542425]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
153ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
26ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 471ms |

| 0 / 0 |
