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

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

这可能吗?

我究竟做错了什么?

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

4

2 回答 2

3

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

于 2009-07-24T21:17:16.520 回答
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 替代解决方案的评论。

于 2009-07-24T21:18:40.620 回答