Sql函数追加列

时间:2010-07-09 07:25:48

标签: .net sql-server tsql

假设我有一张看起来像这样的表:

Name      value  
1 Ford    "some text here and there."    
2 Honda   "More Text Again"   

如何编写一个sql函数,它会将所有行的'value'列附加到其中。所以结果将是

sometext here and there. More Text Again

如果我可以指定一个分隔符,那也很好。

3 个答案:

答案 0 :(得分:0)

这是一个能够做到这一点的功能。在这种情况下,分隔符为,

CREATE FUNCTION  AppendColumn (@ItemID int)

    RETURNS varchar (8000)
AS
BEGIN
    DECLARE @AppendedText   varchar (8000)
    SET     @AppendedText   = NULL  -- MUST be null to avoid leading comma.

    SELECT
        @AppendedText       =  COALESCE (@AppendedText + ', ', '') + value
    FROM
        YourTable
    WHERE
        ... ...
    ORDER BY
        ... ...

    RETURN @AppendedText
END

答案 1 :(得分:0)

如果您使用的是2005 +:

,则可以使用FOR XML PATH作弊
SELECT Value + ','
FROM table
FOR XML PATH('')

答案 2 :(得分:0)

在变量中将值连接在一起,使用如下语句添加分隔符:

SELECT @result = @result + t.Value + @separator
FROM @test AS t;

作为一个完整的例子:

--** Declare test table
DECLARE @test TABLE (Name VARCHAR(20), Value VARCHAR(50));

--** Insert test data
INSERT INTO @test (Name, Value)
SELECT 'Ford', 'some text here and there.' UNION ALL
SELECT 'Ford', 'More Text Again'

--** Declare variables
DECLARE @result VARCHAR(1000);
DECLARE @separator VARCHAR(3);

--** Set separator and initialize the result (important)
SET @result = '';
SET @separator = ' | ';

--** Concatente the values together separating them with @separator
SELECT @result = @result + t.Value + @separator
FROM @test AS t;

--** Return the result removing the final separator
SELECT LEFT(@result, LEN(@result)-1);

这使用|作为分隔符,将给你:

some text here and there. | More Text Again