我想创建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

只是一个想法......你说过简单: - )

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top