2011-08-19 37 views
2

編輯:根據以下答案,我添加了「dbo」。並提出澄清意見。SQL Server:作爲另一個函數的參數

問題:如何將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 
+0

是否'選擇*從fn_Tabler(選擇fn_Scalar())'工作? – cdhowie

+0

@cdhowie:'select * from dbo.fn_Tabler(select dbo.fn_Scalar())'yield「在關鍵字'select'附近有錯誤的語法''和'near syntax''''' –

+0

嗯,這值得一試。 – cdhowie

回答

0

BOL說:「標量值函數必須至少使用該函數的兩部分名稱調用。」

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

編輯: 我錯了,還有就是表值函數...文檔說,只有常量和@local_variables可以傳遞到表值函數(see here

+0

查看我對Pranay Rana的評論:fn_Tabler不是一個標量函數。它返回一個表格。 –

+0

是的,我已經在我的服務器上測試過並檢索到相同的錯誤。請參閱編輯我的答案。 –

+0

這個文檔評論很好的隱藏在這個巨大的文檔中:-) –

1

其工作對我來說

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

我想你忘了在函數名前添加dbo

+0

'select * from dbo.fn_Tabler(dbo.fn_Scalar())'yield:'。'附近語法不正確。 –

+0

您的代碼可用,因爲這兩個函數都是標量函數。 –

相關問題