0

次のスカラー関数がありますが、問題は実際の結果を返さず、クエリを返すことです。

私がここで見逃していることや間違っていることについて、誰かが私を案内してくれますか?

私は次の関数を形成しました

ALTER function test(@QueId int, @Answer varchar(250)) RETURNS VARCHAR(500) AS   
BEGIN  
   DECLARE @STR varchar(4000) 
   DECLARE @QRY AS VARCHAR(1000)

   SELECT @QRY=
     'SELECT @str = COALESCE(@str + '';'','''') + AnswerText '+  
     'FROM SurveyQuestionAnswerTypes WHERE AnswerType=(Select AnswerType From SurveyQuestions Where QuestionID=' + 
     CAST(@QueId AS VARCHAR(4)) + ')AND AnswerValue in (' + replace(@Answer,'^',',') +')'

   --EXEC sp_executesql @QRY, '@STR VARCHAR(4000)', @STR
   RETURN @QRY 
END  

結果を返す代わりに、それを返します

SELECT @str = COALESCE(@str + ';','') + AnswerText 
FROM SurveyQuestionAnswerTypes 
WHERE AnswerType = (Select AnswerType 
                    From SurveyQuestions 
                    Where QuestionID=25)AND AnswerValue in (3,4,5,6)
4

3 に答える 3

2

そうするように指示したため、クエリが返されます。

コードを見てください: 実際に動的 SQL ( ) を実行する行をコメントアウトしており、代わりにクエリ ( ) を文字列としてEXEC sp_executsql .....返しています。@QRY

--EXEC sp_executesql @QRY, '@STR VARCHAR(4000)', @STR
RETURN @QRY 

文字列表現を返す代わりにクエリを実行するように変更するだけです....

于 2012-05-08T07:34:28.903 に答える
0

「exec」または「sp_executesql」を実行したり、関数内のストアドプロシージャを実行したりすることはできません。

このブログを参照できます

またはこのSOの質問

于 2012-05-08T08:03:42.557 に答える
0

この構文を試してみてください。これはうまくいくかもしれません:

Exec (@QRY)
于 2012-05-08T07:48:24.703 に答える