0

是否可以在報表查詢中創建和使用用戶定義的函數?報告服務:在報告查詢中創建用戶定義的功能。這是真的嗎?

事情是這樣的:

if OBJECT_ID('userFunc', 'TF') is not null drop function userFunc 
go 

create function userFunc(@id int) 
returns @tbl table 
([id] int) 
begin 
insert into @tbl (id) values(@id) 
return 
end 
go 

select * from userFunc(1) 

if OBJECT_ID('userFunc', 'TF') is not null drop function userFunc 

當我運行在SQL Server 2008 Management Studio中,它返回我的「身份證」這個查詢:1,但是當我把這個查詢到報告查詢設計器 - 我得到的未來錯誤:

TITLE: Microsoft Report Designer

An error occurred while the query design method was being saved. Incorrect syntax near 'go'.

'CREATE FUNCTION' must be the first statement in a query batch.

Incorrect syntax near 'go'.

Incorrect syntax near 'userFunc'.

有什麼建議嗎? 如何在Reporting Services查詢中創建和使用udf?

回答

1

「GO」 將only be recognised by SQL tools:不是DB引擎也不SSRS解析器

這可能,如果你真的想

EXEC 'if OBJECT_ID(''userFunc'') is not null drop function userFunc' 
EXEC 'create function userFunc(@id int) 
returns @tbl table 
([id] int) 
begin 
insert into @tbl (id) values(@id) 
return 
end' 
select * from userFunc(1) 

但是,你需要ddl_admin或db_owner來運行它。

您是否考慮過CTE或派生表?一個價值udf這樣的表可以被CTE取代

+0

非常感謝您的幫助,這正是我所期待的。 這個udf只是創建的例子,真正的udf更復雜。 – Vitaly 2010-01-29 07:36:03