Функция значения по умолчанию для SQL Server 2005 против оператора INSERT Вызываемая функция - PullRequest
0 голосов
/ 01 февраля 2012

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

В базе данных SQL Server 2005 у нас есть функция, которая возвращает значение DateTime на основе времени Utc и часового пояса локального клиента. Эта функция была применена двумя способами:

  1. Как вызов функции в значении по умолчанию для столбца
  2. Как вызов функции в операторе INSERT в различных хранимых процессах.

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

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

Ответы [ 2 ]

0 голосов
/ 01 февраля 2012

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

Если это значение по умолчанию, тогда вы можете быть уверены, что оно всегда будет заполняться независимо от того, как данные вводятся в базу данных.Если у вас есть что-то, что нужно обновить, если другие данные изменятся, то триггер будет поддерживать его в актуальном состоянии независимо от того, как изменились данные.Если несколько хранимых процедур могут быть написаны для выполнения одной и той же задачи (которую должны вызывать разные приложения), то вы более подвержены риску использования различных методов для заполнения поля.Кроме того, вы рискуете, что данные будут введены за пределами процедуры вставки из окна запроса, скрипта, импорта и т. Д. Это особенно верно, если вам может потребоваться перенести большие объемы данных из другой системы или нового клиента и запуститьодна запись за раз через процесс вставки слишком медленная.

Я говорю, что функция по умолчанию (и триггер, если вам нужно по какой-либо причине обновить дату) проще всего поддерживать, и способ, которымменьше всего, чтобы отрицательно повлиять на целостность данныхТакже вероятно, что хранимый процесс выполняет вставку быстрее, чем хранимый, который выполняет вычисления при выборе, а не при вставке.

0 голосов
/ 01 февраля 2012

Функция должна оцениваться каждый раз для каждой строки в столбце, независимо от того, где она находится.

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

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