如何在公用表表达式中引用表值函数?

时间:2009-09-02 15:56:28

标签: sql sql-server tsql

注意:此问题似乎仅限于SQL Server 2005 SP2

我有一个公共表表达式,它迭代了一系列日期。我需要在调用表值函数时引用这些日期。下面是这样的,它给GetMyData调用的第二个参数带来了语法错误。如果我使用其他值,例如@END_DATE,则可以使用。这是错误:

Msg 102, Level 15, State 1, Line 17
Incorrect syntax near '.'.

除了使用游标之外,还有其他方法吗?

if object_id (N'dbo.GetMyData', N'TF') is not null
    drop function dbo.GetMyData
go

create function GetMyData(@d datetime)
returns @t table (part varchar)
as
begin
    insert @t select 'a'
    insert @t select 'b'
    insert @t select 'c'

    return
end
go

declare @START_DATE datetime
declare @END_DATE datetime

set @START_DATE = '4/1/2007'
set @END_DATE = '4/11/2007'

with dates_in_range([date]) as
(
    select [date] = @START_DATE 
    union all select [date] = [date] + 1
    from dates_in_range
    where [date] < dateadd(dd,0, datediff(dd,0,@END_DATE))
)
select d.[date], c.*
from dates_in_range d
cross apply dbo.GetMyData(d.[date]) c

1 个答案:

答案 0 :(得分:1)

此特定实例上数据库的database compatibility set to 90是否正确?

“... CROSS APPLY dbo.GetMyData(Column)...”仅在兼容性&gt; = 90时才有效。它在&lt; 90。

然而,“...... CROSS APPLY dbo.GetMyData(@Variable)...”已被接受。

我之前见过这个,不知道为什么它不一致......