从TSQL视图(pivot?)中的数据行执行字符串连接
我想在SQLServer中创建一个视图,该视图结合了多个数据库元数据 我想要的一段元数据位于从TSQL视图(pivot?)中的数据行执行字符串连接,sql,sql-server-2005,concatenation,sql-view,Sql,Sql Server 2005,Concatenation,Sql View,我想在SQLServer中创建一个视图,该视图结合了多个数据库元数据 我想要的一段元数据位于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
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!
如您所见,“text”列中的数据如果超过最大长度(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转义字符串的文本。有几种可能的解决方案。最简单的方法是使用CTE。这篇文章对这个主题进行了很好的讨论:看看这里:为什么不使用定义列,将数据存储为单个nvarchar(max) 而不是读取多个syscomments文本(nvarchar(4000))列,这些列分布在多行上,并且必须连接
SELECT object_id, definition FROM sys.sql_modules
只是一个想法。。。你说的很简单:-)正如问题中提到的,我已经走了这条路。结果是文本中充满了XMl转义序列,从逻辑比较运算符到新行,无所不包。此乱码输出不适用于进一步的操作,如搜索。谢谢。这更有帮助。
SELECT object_id, definition FROM sys.sql_modules