Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server MS SQL Server 2008R2:如何检索大型文本列的内容?_Sql Server_Xml_Text_Truncated - Fatal编程技术网

Sql server MS SQL Server 2008R2:如何检索大型文本列的内容?

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个字符 请参见输出网格:: 如何检索此列的全部内容(而不修改架构) 首先,查询分析

我有一个表,其列名为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个字符

请参见输出网格::


如何检索此列的全部内容(而不修改架构)

首先,查询分析器工具存在区域限制。 在查询上单击鼠标右键

您将找到两个字段:

执行->常规->设置文本大小

结果->网格->检索的最大字符数


无论如何,使用查询分析器可能无法获取如此大的文本。这是因为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,需要空白
我的目的只是检索列的原始内容,以检查内容是否被截断。所以这个解决方法现在已经很好了。