【问题标题】:SQL Server 2008 Rows to 1 CSV fieldSQL Server 2008 行到 1 个 CSV 字段
【发布时间】:2010-11-11 00:58:54
【问题描述】:

我们使用的是 SQL Server 2008,我正在尝试确定是否有办法让存储过程在 1 个 CSV 字段中返回我的结果

例如:

SELECT TOP 4 carModels
FROM dbo.Models

会回来

Jeep
Honda
Mitsubishi
Ford

我希望它在 1 个字段中返回,如下所示: 吉普、本田、三菱、福特

我知道我们可以使用程序集、临时表或服务器端代码来做到这一点,但我不想走那条路。您是否可以提出任何提示/技巧来获得我正在寻找的结果?

【问题讨论】:

    标签: sql sql-server-2008 csv concatenation


    【解决方案1】:

    试试这个:

    DECLARE @x varchar(8000)
    
    SELECT TOP 4
        @x=ISNULL(@x+', ','')+carModels
        FROM dbo.Models
    
    SELECT @x AS carModels
    

    编辑与上述相同的答案,但这里有完整的代码来测试它...

    declare @Models table (RowID int not null primary key identity(1,1), carModels varchar(20))
    insert into @Models values ('Jeep')
    insert into @Models values ('Honda')
    insert into @Models values ('Mitsubishi')
    insert into @Models values ('Ford')
    insert into @Models values ('Mazda')
    
    DECLARE @x varchar(8000)
    SET @x=null
    SELECT TOP 4
        @x=ISNULL(@x+', ','')+carModels
        FROM @Models
    
    SELECT @x AS carModels
    

    输出:

    carModels
    ----------------------------------
    Jeep, Honda, Mitsubishi, Ford
    
    (1 row(s) affected)
    

    【讨论】:

    • 如何将 csv 值加入到带有其他相关数据的选择中?
    【解决方案2】:

    以下可能有效。我今天没有要验证的 SQLServer。

    DECLARE @Str VARCHAR(8000)
        SET @Str = SPACE(0)
        SELECT @Str = @Str + ',' + SUBSTRING(@Str + Models.Name, 1, 10)
          FROM dbo.Models
        PRINT @Str 
    

    这是您可以在客户端上执行的操作吗?如果我可以选择,我可能会将其从数据层中删除并放在客户端上,并在需要时将其格式化为 CSV。

    【讨论】:

    • 这不起作用,这是它返回的内容:,Jeep,,JeepHonda,,Jeep,,Jee,,Jeep,,Jee
    • 哦,你可以调整@Str的子字符串不包括,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多