表值函数混合列

时间:2011-12-08 13:21:21

标签: sql-server sql-server-2005 sql-server-2008

我通过多个来回数据库调用将一些在应用程序中处理的sql逻辑切换到sql存储过程和函数中,这样一个调用可以完成以前很多的工作。

这种逻辑大部分需要在不同的数据子集之间进行连接,因此我将这些逻辑构建到函数中以便于轻松加入。这很好但是时不时的功能似乎有点疯狂,并开始混淆我的列。我认为这是因为我在进一步开发应用程序时进一步提升了堆栈的结果,但我不确定。

以下是与语言锁定相关的列规范。

Column spec

以下是混合列的功能。它调用另一个具有更复杂逻辑的函数,所以我不打算发布它,而是直接调用该函数的结果。

Function spec

最后查询有问题的函数以及用作其数据源的内部函数的结果。源函数正确地返回数据,但是来自另一个函数的select *导致数据完全混淆,这显然导致逻辑进一步完全失败。

Function results

任何想法到底是怎么回事?是否因为我怀疑其他变化的结果?如果是这样,有没有办法级联?

由于

编辑进一步检查显示,尽管选择*

,但问题功能在左​​侧缺少两列

1 个答案:

答案 0 :(得分:9)

您可能需要使用sp_refreshsqlmodule来修复元数据。很可能你已经删除并重新创建了底层函数,而没有对调用函数做同样的事情。

除此之外,还要记住以下几点:

  • 永远不要使用SELECT *;总是命名列
  • 考虑使用WITH SCHEMABINDING来避免对基础功能进行未经注意的更改