2013-04-11 18 views
6

Nhận lỗi khi cố gắng sử dụng câu lệnh Chọn trong một hàm. Lỗi khẳng định:Lỗi nhận "Chọn câu lệnh được bao gồm trong một hàm không thể trả lại dữ liệu cho khách hàng"

Msg 444, Level 16, State 2, Thủ tục JDE_GetWhereClause_test, Line 26
Chọn báo cáo bao gồm trong một chức năng không thể trả lại dữ liệu cho khách hàng.

Bất kỳ ý tưởng nào?

CREATE FUNCTION [dbo].[JDE_GetWhereClause_test] 
(
@tablename as varchar 
) 
RETURNS varchar(max) 
AS 
BEGIN 
-- Declare the return variable here 
Declare @ResultVar as varchar(max) 

-- Add the T-SQL statements to compute the return value here 

set @tablename = 'F0101' 
Declare @Sql nvarchar(max) 
Declare my_cur cursor for 
    SELECT fsuser FROM dbo.JDE_ExRowSecurity where fsuser = fsuser; 

Declare @fsuser as nchar(15) 
open my_cur; 
fetch next from my_cur; 
while @@fetch_status = 0 
    begin 
     fetch next from my_cur into @fsuser;  
     set @ResultVar += ',' + @fsuser; 
    end; 
close my_cur; 
deallocate my_cur; 

-- Return the result of the function 
RETURN @ResultVar 
END 
+0

Bằng cách này, bạn có thể trao đổi các thứ hai 'lấy tuyên bố next' với 'thiết @ResultVar ...' như bạn bỏ qua hàng đầu tiên và sử dụng hàng cuối cùng hai lần – Axarydax

Trả lời

9

Hãy thử chơi với một cái gì đó giống như ...

CREATE FUNCTION [dbo].[JDE_GetWhereClause_test] 
(
@tablename as varchar 
) 
RETURNS varchar(max) 
AS 
BEGIN 
    -- Declare the return variable here 
    Declare @ResultVar as varchar(max) 

    -- Add the T-SQL statements to compute the return value here 

    set @ResultVar = (select STUFF((SELECT ',', fsuser as [text()] 
        FROM dbo.JDE_ExRowSecurity 
        FOR XML PATH ('')), 1, 1, '') as blah) 

    -- Return the result of the function 
    RETURN @ResultVar 
END 

select 'Answer is: '+[dbo].[JDE_GetWhereClause_test]('whatever')

+0

hmm; Tôi có một lựa chọn khá phức tạp mà tôi đang làm ... cái mà tôi đã phát biểu ở đây là một phiên bản đơn giản. Dù sao tôi sẽ chuyển sang một thủ tục được lưu trữ thay vì chức năng tha kể từ khi trở lại là một trường duy nhất varchar lớn .... Cảm ơn sự giúp đỡ của bạn. – Ankur

Các vấn đề liên quan