2009-07-24 87 views
0

我想創建一個函數,該函數返回給定查詢的給定字段的concatinated字符串。這是我做的。 這個給我一個錯誤。 必須聲明表變量「@qry」。來自多行的SQL Concat字段

CREATE FUNCTION dbo.testing 
    ( 
    @qry varchar(1000), 
    @fld varchar(100), 
    @separator varchar(15) = '; ' 
    ) 
RETURNS varchar 
AS 
    BEGIN 
    DECLARE @rslt varchar(1000) 
    SET @rslt ='' 

    SELECT @rslt = @rslt + @separator + CAST(@fld as varchar(160)) FROM @qry 

    RETURN @rslt 
    END 

我所試圖做的是通過一個查詢,這一功能和接收查詢的某些領域的串連字符串。

這可能嗎?

我在做什麼錯?

編輯:順便說一句我有MSSQL Server 2005;

+2

這樣做:** Set @ rslt = NULL; SELECT ISNULL(@ rslt + @ separator,'')+ ... **所以你不會在@rslt – 2009-07-24 21:32:23

回答

3

如果您想要通過任何形式的動態SQL,您需要通過EXEC或(首選)sp_ExecuteSQL執行它。如果你使用動態SQL,確保你的代碼不受任何注入攻擊,以免你遭受到little Bobby Tables的憤怒:-)

+0

+的開始處得到@separator,這要感謝我提醒注意關於注入攻擊。 – THEn 2009-07-24 21:21:53