INSERT存储过程应该如何处理Identity值?

时间:2010-01-16 15:31:19

标签: sql-server stored-procedures return-value identity

我需要编写一个存储过程来将一行插入表中。该表有一个名为ID的Identity列。我的问题是我应该返回值吗?如果是,那该怎么回事?

据我所见,

  • 我可以将其作为返回值
  • 返回
  • 我可以将其作为out参数返回,或
  • 我无能为力。

DB程序员默认做什么?

6 个答案:

答案 0 :(得分:3)

“这取决于。”

大多数时候,我忽略了它。大多数呼叫者不需要它。如果您不了解您的消费者,那么我可能会将其作为结果集返回(因此您不会在不需要它的人身上强制使用附加参数。)

答案 1 :(得分:2)

如果应该在某天使用它,我宁愿返回为返回值。

如果它没用,那么我不会在这里增加额外的复杂性。

答案 2 :(得分:2)

我同意乔 - 这取决于。返回它的一个好处是你的调用应用程序可以使用ID的存在作为成功的指示。

答案 3 :(得分:2)

通常我会返回整个新行,当然还包括indentity列值。我返回整个新行的原因是因为很可能通过触发器或其他进程将其他列添加到行中,并且调用应用程序或进程会发现创建新行很有用。

答案 4 :(得分:2)

如果您正在寻找一种真正的写入所有插入程序的方法,那么您就是在浪费时间。数据库中的某个地方总会有一个表,要求您以某种方式违反自己的约定。您可以期待的最好的是一套一般的一致性指南(而不是规则)。

对于一般一致性指南,我建议如下:

  • 返回值始终为int,无法更改。因此,最好保留为成功返回零或失败@@error
  • 如果您要发回一小部分标量值,则输出参数比默认结果集更有效。因此,您可以这种方式返回@@identity值和任何其他自动生成的值(例如GUID,时间戳)。

答案 5 :(得分:0)

我通常将其添加为out参数,并将返回值保留为0表示成功,或者将0表示为失败。