来自多行的 SQL Concat 字段

Posted

技术标签:

【中文标题】来自多行的 SQL Concat 字段【英文标题】:SQL Concat field from multiple rows 【发布时间】:2009-07-24 21:12:11 【问题描述】:

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

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

这可能吗?

我做错了什么?

编辑:顺便说一句,我有 MSSQL Server 2005;

【问题讨论】:

这样做:设置@rslt=NULL; SELECT ISNULL(@rslt+@separator,'')+... 所以你不会在@rslt 的开头得到@separator 【参考方案1】:

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

【讨论】:

【参考方案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 替代解决方案的 cmets。

【讨论】:

以上是关于来自多行的 SQL Concat 字段的主要内容,如果未能解决你的问题,请参考以下文章

sql多行转一行去重

Java JDBC中的Concat SQL [关闭]

MySQL多行结果合并成一行,GROUP_CONCAT

wm_concat 多行字符串拼接

wm_concat 多行字符串拼接

group_concat函数详解