2009-07-24 5 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 

この関数にクエリを渡すと、クエリの特定のフィールドの連接文字列を受け取るです。

これは可能ですか?

私は間違っていますか?

EDIT:BTW私はMSSQL Server 2005を持っています。

+2

次のようにします。** Set @ rslt = NULL; SELECT ISNULL(@ rslt + @ separator、 '')+ ... ** @rslt –

答えて

2

FROM @variableは実行できません。動的SQLを使用して、@ qryを派生テーブルなどにする必要があります。しかし、私はそれが本当に最善のアプローチではないと思います。私は、これはあなたが何をしようとしてであると考えている:

http://geekswithblogs.net/mnf/archive/2007/10/02/t-sql-user-defined-function-to-concatenate-column-to-csv-string.aspx

は、同様にXMLの代替ソリューションに関するコメントを必ずお読みください。

3

任意の形式の動的SQLを渡す場合は、EXECまたは(preferred)sp_ExecuteSQLを使用して実行する必要があります。動的SQLを使用している場合は、little Bobby Tables :-)の怒りに悩まされないように、コードが注入攻撃を受けないようにしてください。

+0

+の開始時に@セパレータを取得しないようにしてください。 – THEn

関連する問題