2013-04-11 108 views
6

関数でSelectステートメントを使用しようとしたときにエラーを受け取りました。エラー状態:受信エラー「関数内に含まれるSELECTステートメントがクライアントにデータを返すことができません」

メッセージ444、レベル16、状態2、手順JDE_GetWhereClause_test、ライン26
機能に含まSelect文がクライアントにデータを返すことができません。

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

ところで、あなたは '設定@ResultVar'とnext'文をフェッチ秒を入れ替えるかもしれない... 'として最初の行をスキップし、最後の行を2回使用します。 – Axarydax

答えて

9

は何かなどで再生してみてください...

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;私はかなり複雑な選択をしています...私がここで慣れているのは単純なバージョンです。とにかく、戻り値が単一の大きなvarcharフィールドであるため、関数ではなくストアドプロシージャに切り替えるつもりです....あなたのお手伝いをありがとう。 – Ankur

関連する問題