交叉应用功能永远运行

时间:2012-05-22 16:39:20

标签: sql sql-server tsql

我在存储过程中使用交叉应用程序将日期范围扩展到各个日期。

select *
from #tbl_tempOutPut as st
cross apply dbo.explodeDates(st.startdate,st.enddate) as dt

表#tbl_tempOutPut看起来像这样:

ID  Des startdate   enddate     kindex      
A   att 2003-12-04  2004-01-03  1
A   att 2004-01-04  2004-02-03  1

函数dbo.explodeDates是之前接受的答案。

我的问题是查询会永远运行而不会返回。

非常感谢,

1 个答案:

答案 0 :(得分:2)

explodeDates重写为内联表值函数。这几乎肯定会带来巨大的变化。

CREATE FUNCTION dbo.explodeDates (
  @StartDate    char(10),
  @EndDate      char(10)
) RETURNS TABLE AS RETURN SELECT
  CONVERT(datetime,@StartDate)+n-1 AS [Date]
  FROM Numbers
  WHERE Number <= DATEDIFF(day,@StartDate,CONVERT(datetime,@EndDate)+1)