Позволить SQL генерировать ошибку, затем обработать или полностью предотвратить ошибку? - PullRequest
0 голосов
/ 26 марта 2019

В моем коде я генерирую список идентификаторов, а затем вводю связанные данные в таблицу с идентификатором в качестве первичного ключа.Лучше ли позволять SQLSever генерировать ошибку и обрабатывать ее (ошибка целостности)?Или я должен предварительно проверить, существует ли этот идентификатор на сервере, а затем выполнить вставку?

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Если вы вставляете несколько строк, и одна из них нарушает ограничение, то, как правило, ни одна из строк не будет вставлена.

Это может быть болью. По этой причине вы можете проверить, прежде чем вставлять несколько строк одновременно. Это помогает гарантировать, что данные действительны; конечно, условия гонки могут по-прежнему вызывать проблемы при выполнении «реального» запроса.

Тем не менее, выполнение проверки в виде отдельного запроса увеличивает накладные расходы (дополнительная передача туда и обратно). В любом случае база данных будет выполнять проверку (поэтому она избыточна). И вы не можете удалить чек из базы данных (из-за условий гонки).

Некоторым людям также нравится сначала проверять, все ли в порядке, поэтому у автоматически увеличивающихся идентификаторов / идентификаторов меньше пробелов. Конечно, отсутствие зазоров не гарантируется, поэтому это просто уменьшает одну причину разрывов.

Эта db <> скрипка иллюстрирует эти проблемы.

0 голосов
/ 26 марта 2019

Некоторые люди используют GUIDS по этой конкретной причине, но не делайте этот столбец кластеризованным столбцом, иначе вы будете страдать от фрагментации индекса (если только вы не создадите последовательные направляющие ... что усложнит ситуацию).

Guid.NewGuid();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...