Sql server MS SQL Server 2008R2:如何检索大型文本列的内容?
我有一个表,其列名为xml\u cache,包含大量字符,最多80000个。该列声明为Sql server MS SQL Server 2008R2:如何检索大型文本列的内容?,sql-server,xml,text,truncated,Sql Server,Xml,Text,Truncated,我有一个表,其列名为xml\u cache,包含大量字符,最多80000个。该列声明为nvarchar(max) 使用SQL Management Studio检索此专栏的内容时遇到问题 SELECT [xml_cache], * FROM [dbo].[NZF_topic] AS nt WHERE nt.id LIKE '%nzf_1609%' 当我运行这个SQL时,输出网格包含被截断的数据,正好是43680个字符 请参见输出网格:: 如何检索此列的全部内容(而不修改架构) 首先,查询分析
nvarchar(max)
使用SQL Management Studio检索此专栏的内容时遇到问题
SELECT [xml_cache], * FROM [dbo].[NZF_topic] AS nt
WHERE nt.id LIKE '%nzf_1609%'
当我运行这个SQL时,输出网格包含被截断的数据,正好是43680个字符
请参见输出网格::
如何检索此列的全部内容(而不修改架构) 首先,查询分析器工具存在区域限制。 在查询上单击鼠标右键 您将找到两个字段: 执行->常规->设置文本大小 及 结果->网格->检索的最大字符数
无论如何,使用查询分析器可能无法获取如此大的文本。这是因为QueryAnalyzer是一个开发工具,检索一个没有人能读的大文本没有意义。在我发布问题后,我看到了。解决方法是将列包装在
内:
SELECT convert(xml,'<xml><![CDATA[' + cast(xml_cache as varchar(max)) + ']]></xml>'),
* FROM [dbo].[NZF_topic] AS nt
WHERE nt.id LIKE '%nzf_1609%'
选择“转换(xml)”,
*来自[dbo]。[NZF_主题]作为nt
其中nt.id类似于“%nzf_1609%”
然后使用一些简单的搜索和替换(
-->
),我们可以得到正确的输出。这不是一个完美的解决方案,但是微软的产品也不是完美的 这是SQL Server Management Studio的一个限制,但在SSMS 18.2中,此限制已增加。默认情况下,它将截断为65535个字符(而不是43679个),但您可以在工具/选项/查询结果/SQL Server/结果到网格/非XML数据中配置它,以显示最多2097152个字符
请参见我已经尝试过增加文本大小的建议,但它没有起作用,因为非XML输出限制为65535个字符。我的列最多可以包含80000个字符。看起来您的数据实际上是XML。如果是这样的话,你就不需要跳那么多圈了。具体地说,从[dbo].[NZF_topic]中选择cast(xml_缓存为xml)作为nt,其中nt.id(如“%NZF_1609%”)应该可以工作。
我试过了,但由于xml包含空白,我看到了这个错误:Msg 9410,级别16,状态1,行1 xml解析:行1,字符23,需要空白
我的目的只是检索列的原始内容,以检查内容是否被截断。所以这个解决方法现在已经很好了。