如何执行存储过程中的“select *”?

时间:2011-02-11 16:18:59

标签: sql database stored-procedures sybase

如果你有一个(Sybase)存储过程“select * from ... where ...”,那怎么办? *什么时候扩展到所有列?在sproc创建时,在sproc编译时,执行时间等?

我正在使用像没有返回其中一个列的sproc,它让我觉得它是在sproc创建时,但我找不到任何引用来确认。

编辑:我已经确认重新编译一个sproc并不会导致*被重新评估,这几乎证实了我的初步想法,但仍然在寻找记录此行为的参考。< / p>

2 个答案:

答案 0 :(得分:2)

应该是执行时间。您可以按照以下步骤测试您的理论:

  1. 创建一个虚拟表MY_DUMMY_TABLE 有一个字段(我们只是调用它 “ID”)

  2. 编写一个存储过程 只有选择*来自 MY_DUMMY_TABLE

  3. 观察存储过程确实如此 确实会回到你的一个领域

  4. 更改表格以添加其他字段 (我们称之为“注意”)

  5. 再次运行存储过程

  6. 观察是否包含“NOTES” 在输出中

答案 1 :(得分:0)

编译过程时会扩展*,这在第一次执行时发生。之后,使用编译版本。

出于这样的原因,请避免在生产代码中使用select *。请参阅this相关问题。