SQL Server:作为另一个函数的参数

时间:2011-08-19 07:44:55

标签: sql sql-server-2008 function

编辑:根据以下答案,我添加了“dbo”。和澄清的评论。

问题:如何将SQL用户定义函数(UDF)作为另一个UDF的参数传递?请注意,该函数返回一个表。

select dbo.fn_Scalar()                      -- Returns 'sa'.
select * from dbo.fn_Tabler('sa')           -- Returns a table (not scalar).
select dbo.fn_ScalarArg(dbo.fn_Scalar())    -- Returns 'sa'
select * from dbo.fn_Tabler(dbo.fn_Scalar())    -- ERROR: Incorrect syntax near '.'.

(目前使用的是SQL Server 2008 R2)


编辑:为了简化调试,以下是创建上述功能的示例代码:

IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[fn_Scalar]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION dbo.fn_Scalar
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[fn_Tabler]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION dbo.fn_Tabler
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[fn_ScalarArg]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION dbo.fn_ScalarArg
GO

create function fn_Scalar()
returns char(200) as
begin
    declare @user char(200)
    select  @user = 'sa'
    return  @user
end
GO

create function fn_Tabler(@User char(200))
returns table as
    return select @User [User]
GO

create function fn_ScalarArg(@User char(200))
returns char(200) as
begin
    declare @u2 char(200)
    select  @u2 = @User
    return  @u2
end
go

2 个答案:

答案 0 :(得分:1)

它为我工作

    select [dbo].[GetOverAllWinLossDetailPointByDay] 
               (1,0,1,dbo.GetOverAllWinLossDetailPointByDay(1,0,1,1))

我想您忘记在功能名称前添加 dbo

答案 1 :(得分:0)

BOL说:“必须至少使用函数的两部分名称来调用标量值函数。”

select * from dbo.fn_Tabler(dbo.fn_Scalar())    

编辑: 我错了,有表值函数......文档说只有常量和@local_variables可以传递给表值函数(see here