Что должна делать хранимая процедура INSERT со значением Identity? - PullRequest
0 голосов
/ 16 января 2010

Мне нужно написать хранимую процедуру, чтобы вставить строку в таблицу. В таблице есть столбец Identity с именем ID. У меня вопрос, должен ли я вернуть значение и если да, то как?

Насколько я вижу,

  • Я мог бы вернуть его как возвращаемое значение,
  • Я мог бы вернуть его как параметр out или
  • Я ничего не мог с этим поделать.

Что бы программист БД делал по умолчанию?

Ответы [ 6 ]

3 голосов
/ 16 января 2010

"Это зависит."

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

2 голосов
/ 16 января 2010

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

Для общих рекомендаций по согласованию я предлагаю следующее:

  • Возвращаемое значение всегда int и не может быть изменено. Соответственно, лучше всего возвращать ноль для успеха или @@error для ошибки.
  • Выходные параметры более эффективны, чем набор результатов по умолчанию, если у вас есть небольшая коллекция скалярных значений для отправки обратно. Поэтому вы можете вернуть значение @@identity и любые другие автоматически сгенерированные значения (например, GUID, метки времени) следующим образом.
2 голосов
/ 16 января 2010

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

2 голосов
/ 16 января 2010

Я согласен с Джо - это зависит. Одно из преимуществ его возвращения заключается в том, что ваше вызывающее приложение может использовать наличие идентификатора в качестве признака успеха.

2 голосов
/ 16 января 2010

Я предпочитаю возвращать в качестве возвращаемого значения, если предполагается, что когда-нибудь будет использоваться.

Если это бесполезно, то я бы не стал добавлять сюда дополнительную сложность.

0 голосов
/ 16 января 2010

Я обычно добавляю его как выходной параметр и оставляю возвращаемое значение равным 0 для успеха или не равным 0 для ошибки.

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