【发布时间】:2017-03-02 14:30:49
【问题描述】:
我遇到了一个用户定义的函数 (dbo.AnnualMetrics_ByCat(@StartYear, @EndYear)),它接受年份范围参数并包含大约 5 个 CTE 与从中选择数据的查询链接在一起.该函数被编码为返回如下表:
MonthYear | CATID | Classification | GeneralClass | TotalUsedVolume | TotalUnusedVolume
--------- | ----- | -------------- | ------------ | --------------- | -----------------
2/1/2010 | AGR | Agricultural | NON-RES | 429.615 | 138.543
函数调用时...
SELECT * FROM dbo.AnnualMetrics_ByCat(2006,2015) OPTION(MAXRECURSION 200)
...它返回一个像这样的表(其中缺少“GeneralClass”列,列值向右移动等):
MonthYear | CATID | Classification | TotalUsedVolume | TotalUnusedVolume
--------- | ----- | -------------- | --------------- | -----------------
2/1/2010 | AGR | Agricultural | NON-RES | 429.615
将查询语法剪切/粘贴到 SSMS 窗口并手动运行时,将返回正确的表结构和值。
我的问题是,有人知道是什么原因造成的吗?删除该函数并使用原始 CREATE 脚本重新创建它解决了该问题,但是我仍然对问题的根源感到好奇。
【问题讨论】:
-
检查return语句,看看你想要的所有列是否都在里面。
-
向我们展示函数。
-
您的函数是否引用了视图?该视图是否有选择 *?你的函数有选择 * 吗?
-
@SeanLange 该函数不引用视图,但其中一个 CTE 由 Select * From dbo.myDatabaseTable 语句填充。
标签: sql-server user-defined-functions common-table-expression