2012-05-08 127 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

好 - 它返回的查詢,因爲你告訴它這樣做!

看看你的代碼:你有評論指出,實際上執行動態SQL(EXEC sp_executsql .....)的線,而是你返回查詢(@QRY)作爲一個字符串:

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

只是更改執行查詢,而不是返回它的字符串表示的....

+0

真正的你,但是當我所以這樣就引發錯誤,只有功能和一些擴展存儲過程可以從函數中執行。 – NoviceToDotNet

+0

@NoviceToDotNet:可能**功能**是錯誤的方式去 - 嘗試將其轉換爲存儲過程。功能在他們可以做什麼(或不能做什麼)方面有很多限制 –

+0

是的你是正確的,我在網上學到了很多東西,但是我應該做什麼,然後我需要從我的角度來看這個概念,但是問題是如何從視圖中調用SP,我應該怎麼做.. – NoviceToDotNet

0

試試這個語法,這可能會爲你工作:

Exec (@QRY) 
+0

否不workinrg,您希望它返回@QRY? – NoviceToDotNet

0

您不能執行「exec」或「sp_executesql」,也不能在函數中執行存儲過程。

你可以參考這個 blog

或本SO question

相關問題