-1

可能重复:
将多行连接成一个文本字符串?

我在 SQL Server 2008 数据库中有 2 个表 - tblQuestion 和 tblSummary。我从 tblQuestion 中选择 QuestionIDs,如下所示。

SELECT QuestionId from tblQuestion WHERE Status='Completed';

结果如下(来自多条记录),

QuestionId 
----------
1
2
5
7
8
9

[6 rows]

现在,我需要将上面选定的 ID 插入 tblSummary 中的“CompletedSections”列(VARCHAR 类型)。它应该以类似 CSV 的格式插入 - 1,2,5,7,8,9

例如,如果我从 tblSummary 中选择那些将如下所示。

SELECT CompletedSections FROM tblSummary WHERE <Some Condition>

结果应该是,

CompletedSections 
-----------------
1,2,5,7,8,9

[1 row]

如何使用 t-SQL(不使用 C# 之类的任何编程语言)在数据库级别完成此操作?我希望使用预定的 SQL SP/函数/触发器通过 t-SQL 实现这一点。

谢谢,

查图尔

4

3 回答 3

2

是我过去使用过的解决方案。这有点 hacky,但它应该比使用光标创建 CSV 更快。这是一些示例代码,可帮助您入门。

DECLARE @tblQuestion TABLE
(
     QuestionId nvarchar(10)
)

DECLARE @tblSummary TABLE
(
    CompletedSections nvarchar(100)
)

INSERT INTO @tblQuestion
VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9)

INSERT INTO @tblSummary
SELECT SUBSTRING(
(SELECT ',' + QuestionId 
from @tblQuestion 
FOR XML PATH('')),2,200000) AS CSV

SELECT * FROM @tblSummary
于 2012-11-20T16:17:21.413 回答
1

这将完成这项工作;

DECLARE @S VARCHAR(5000)

SELECT @S=ISNULL(@S+ ',', '') + CONVERT(VARCHAR(10),QuestionId)
FROM tblQuestion 

SELECT @S
于 2012-11-20T16:08:04.243 回答
-2
    DECLARE @STRING VARCHAR(MAX) = ''
    DECLARE @VALUE VARCHAR(MAX)

    DECLARE A_CURSOR CURSOR FOR
    SELECT QuestionId from tblQuestion WHERE Status='Completed'

    OPEN A_CURSOR
    FETCH A_CURSOR INTO @VALUE

    WHILE @@FETCH_STATUS = 0
    BEGIN

    if @STRING <> ''
    set @STRING = @STRING + ', '

    set @STRING = @STRING + CONVERT(VARCHAR(MAX),@VALUE)

    FETCH A_CURSOR INTO @VALUE

    END

    CLOSE A_CURSOR

    DEALLOCATE A_CURSOR

    INSERT INTO CompletedSection (tblSummary) SELECT @STRING
于 2012-11-20T16:00:08.923 回答