从数据行执行串并置在一个SQL视图(枢轴?)
-
22-09-2019 - |
题
我想创建SQL Server中的视图,它结合几件数据库的元数据。
元数据的一个片我想在sys.syscomments
表生活 - 的培训相关列如下:
id colid text
---- ------ -------------
1001 1 A comment.
1002 1 This is a lo
1002 2 ng comment.
1003 1 This is an e
1003 2 ven longer c
1003 3 omment!
正如你可以看到,在“文本”列中的数据被划分为多个行,如果它传递的最大长度(在SQL Server 8000字节/ 4000个字符,在我的实施例12个字符)。 colid
标识其中组装文本回到一起的顺序。
我想提出的查询/子查询在我看来,以重组从sys.syscomments表的意见,让我有:
id comment (nvarchar(max))
---- ----------------------------------
1001 A comment.
1002 This is a long comment.
1003 This is an even longer comment!
任何建议或溶液?速度是不以任何方式至关重要,但简单和低影响的是(我想,以避免CLR功能等等 - 理想,整个事情就可以在视图定义包裹起来)。我已经调查了一些基于XML的建议,但结果已经产生充满XML字符串逃逸文本。
解决方案
SELECT id,
(
SELECT text AS [text()]
FROM mytable mi
WHERE mi.id = md.id
ORDER BY
mi.col
FOR XML PATH(''), TYPE
).value('/', 'NVARCHAR(MAX)')
FROM (
SELECT DISTINCT id
FROM mytable
) md
其他提示
有几个可能的解决方案。最简单的一种是使用CTE。本文的话题好好讨论:的串联的行值在Transact-SQL
到这里看看:串联值多行合并到一列有序
为什么不使用 sys.sql_modules 定义列,其将数据存储为单个nvarchar(最大)?
代替读取多个syscomments文本(为nvarchar(4000))的列分布在几个行和具有来连接。
SELECT object_id, definition FROM sys.sql_modules
只是一个想法......你说过简单: - )
不隶属于 StackOverflow