来自多行的SQL Concat字段

时间:2009-07-24 21:12:11

标签: sql sql-server user-defined-functions

我想创建一个函数,该函数返回给定查询的给定字段的连续字符串。这就是我做的。 这个给了我一个错误。 必须声明表变量“@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

我要做的是将查询传递给此函数,并为查询的某个字段接收连续字符串。

这可能吗?

我做错了什么?

编辑:BTW我有MSSQL Server 2005;

2 个答案:

答案 0 :(得分:3)

如果要通过任何形式的动态SQL,则需要通过EXEC或(首选)sp_ExecuteSQL执行它。如果您使用的是动态SQL,请确保您的代码不受任何注入攻击,以免您受到little Bobby Tables的愤怒:-)

答案 1 :(得分: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替代解决方案的评论。