SQL Server 2008 t-SQL - 将多个记录 ID 作为 CSV 插入到变量列中



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

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

SELECT QuestionId from tblQuestion WHERE Status='Completed';

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

QuestionId 
----------
1
2
5
7
8
9
[6 rows]

现在,我需要将上述选定的ID插入到tblSummary中的"已完成部分"列(这是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实现这一点。

谢谢

查图尔

这是我过去使用过的解决方案。它有点笨拙,但它应该比使用光标创建 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

这将完成这项工作;

DECLARE @S VARCHAR(5000)
SELECT @S=ISNULL(@S+ ',', '') + CONVERT(VARCHAR(10),QuestionId)
FROM tblQuestion 
SELECT @S
    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

最新更新