可能的重复项:
将多行连接成一个文本字符串?
我在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