0

指定されたクエリの指定されたフィールドの連結された文字列を返す関数を作成したいと思います。これが私がしたことです。そして、これは私にエラーを与えます。 テーブル変数「@qry」を宣言する必要があります。

  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

私がやろうとしているのは、この関数にクエリを渡し、クエリの特定のフィールドの連結された文字列を受け取ることです。

これは可能ですか?

私は何が間違っているのですか?

編集:ところで、私はMSSQLServer2005を持っています。

4

2 に答える 2

3

任意の形式の動的 SQL を通過させたい場合は、EXEC または (推奨) sp_ExecuteSQL を介して実行する必要があります。動的 SQL を使用している場合は、小さな Bobby Tablesの怒りに苦しむことのないように、コードがインジェクション攻撃を受けないようにしてください:-)

于 2009-07-24T21:17:16.520 に答える
2

FROM @変数を実行することはできません。動的 SQL を使用し、@qry を派生テーブルまたはその性質のものにする必要があります。しかし、それは本当に最善の方法ではないと思います。これがあなたがやろうとしていることだと思います:

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

XML 代替ソリューションに関するコメントも必ずお読みください。

于 2009-07-24T21:18:40.620 に答える