2012-05-08 5 views
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) 

答えて

2

を返します - あなたがそうすることを告げたので、クエリを返します!あなたのコードで

ルック:

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

:あなたが実際にに、動的SQL(EXEC sp_executsql .....)を実行だろうし、代わりにあなたが文字列としてクエリ(@QRY)を返すしている行をコメントアウトしていますただ、代わりにその文字列表現を返すクエリを実行するためにそれを変更....

+0

真を参照することができ、関数のみといくつかの拡張ストアドプロシージャは、関数内から実行することができます。 – NoviceToDotNet

+0

@NoviceToDotNet:おそらく**機能**は間違った方法です - これをストアドプロシージャに変換しようとします。機能には、できることにはかなりの制限があります(またはできないこと) –

+0

はい、正確ですが、NETで多くの習慣を習った後、私はそれを何とかしなければなりません。私の見解からこのファクターを呼び出す必要があります。 PROBは、このSPを見てからどのように呼び出すか、それで何をすればいいのですか? – NoviceToDotNet

0

これはあなたのために働くかもしれない、この構文を試してみてください:

Exec (@QRY) 
+0

いいえworkinrg、あなたは@QRYを返すようにしたいですか? – NoviceToDotNet

0

"exec"または "sp_executesql"を実行することはできず、関数内でストアドプロシージャを実行することもできません。

あなたはありますが、私はそれのように、それはエラーをスローしたときに、この blog

ORこのSO question

関連する問題