【发布时间】:2011-01-05 21:03:17
【问题描述】:
我需要编写一个存储过程来向表中插入一行。该表有一个名为 ID 的标识列。我的问题是我应该返回值吗?如果是,如何返回?
据我所知,
- 我可以将它作为返回值返回,
- 我可以将它作为输出参数返回,或者
- 我对此无能为力。
默认情况下,数据库程序员会做什么?
【问题讨论】:
标签: sql-server stored-procedures return-value identity
我需要编写一个存储过程来向表中插入一行。该表有一个名为 ID 的标识列。我的问题是我应该返回值吗?如果是,如何返回?
据我所知,
默认情况下,数据库程序员会做什么?
【问题讨论】:
标签: sql-server stored-procedures return-value identity
“这取决于。”
大多数时候,我会忽略它。大多数呼叫者不需要它。如果您不了解您的消费者,那么我可能会将其作为结果集返回(因此您不会将附加参数强加给不需要它的人。)
【讨论】:
如果它应该在某天使用,我更喜欢作为返回值返回。
如果它没用,那么我不会在这里增加额外的复杂性。
【讨论】:
我同意乔的观点——这取决于。返回它的一个好处是您的调用应用程序可以使用 ID 的存在作为成功的指示。
【讨论】:
通常我会返回整个新行,其中当然包括 indentity 列的值。我返回整个新行的原因是因为很可能其他列通过触发器或其他进程添加到该行,调用应用程序或进程会发现拥有新行很有用。
【讨论】:
我通常将其添加为 out 参数,并将返回值为 0 表示成功或非 0 表示失败。
【讨论】:
如果您正在寻找一种编写所有插入过程的真正方法,那么您就是在浪费时间。在您的数据库中总会有一个表要求您以某种方式违反自己的约定。您可以期望的最好结果是一套通用的一致性指南(而不是规则)。
对于一般一致性指南,我建议如下:
int,不能更改。因此,最好保留返回零表示成功或返回@@error 表示失败。@@identity 值和任何其他自动生成的值(例如 GUID、时间戳)。【讨论】: