XML输出在SQL中被截断

XML输出在SQL中被截断,sql,xml,sql-server-2005,ssms,Sql,Xml,Sql Server 2005,Ssms,我需要返回XML格式的结果集,这很好,但是如果记录数增加,我的XML输出将被截断,这是我的查询 select t.id,t.name,t.address from test FOR XML AUTO, ROOT('Response'), ELEMENTS 但是,我设置了一些选项来增加输出结果集,如 Tools --> Options --> Query Results --> SQL Server --> Results to Text --> Maximum

我需要返回XML格式的结果集,这很好,但是如果记录数增加,我的XML输出将被截断,这是我的查询

select t.id,t.name,t.address from test FOR XML AUTO, ROOT('Response'), ELEMENTS
但是,我设置了一些选项来增加输出结果集,如

Tools --> Options --> Query Results --> SQL Server --> Results to Text --> Maximum              
number of characters displayed in each column
Tools --> Options --> Results --> Maximum characters per column
但我仍然无法得到我想要的结果

请提出我的解决方案

编辑:但是,当我单击XML时,它会在另一个查询窗口中打开,所有XML都显示在这里,但它不会返回所有XML而不是截断的XML


谢谢……

我对ManagementStudio和xml结果集也有同样的问题。我通过使用c#和SqlDataReader以编程方式获取输出解决了这个问题。

在查询输出窗口中获取的XML输出实际上不是为了保存 有效的XML文档。您可以在运行SQL Server时从中获取有效的XML 在.NET中使用ADO或SQLXML托管类将其捕获为流

但是,您可以通过使用限制查询输出大小
在SQL Server Management Studio中,转到工具>>选项>>查询结果>>SQL Server>>结果到文本>>每列中显示的最大字符数

您可以对SQL Server 2005数据库引擎使用SQL Management Studio for 2008。如果这样做,默认值应该足够大,但是在工具->选项->查询结果->SQL Server中,有一个“结果到网格”和“结果到文本”节点

“结果到网格”允许您显式控制XML数据的最大大小,默认最大大小为2MB


如果您没有SSMS 2008的许可证,您应该可以免费使用express edition。

如果您的XML结果集在更改SSMS选项后仍被截断,请在运行XML语句之前使用SQLCMD实用程序with:XML ON选项。使用-o开关将输出定向到文件。SQLCMD是一个命令行实用程序,使用非常简单。请参阅。

尝试以下操作:

Declare @xmldata xml
set @xmldata = (select ... From test for xml...)
select @xmldata as returnXml
这对我很有用(SSMS 2012): 工具>选项>查询结果>SQL Server>网格结果:最大重试字符数:XML数据:无限制。
然后我将网格结果保存到一个文件中。

我也遇到了同样的问题。我将查询结果设置更改为“无限”,但它不起作用。有一个工作机会。它不是很整洁,但是如果您确实想继续使用SQLServerManagementStudio并获得结果。调整查询以转换使用以下方法存储的xml:

convert(xml,'<xml><![CDATA[' + cast(MyColumnWithXml as varchar(max)) + ']]></xml>') 
convert(xml,”)

返回完整的文本。请注意,您必须在结束时进行一些格式化

我知道这个问题是在10年前提出的,但是如果有人正在寻找一种不需要在DB端进行任何更改的解决方法,并且与公认的答案有点类似,但与
SqlDataReader
不同

您可以使用
DataTable
并使用
SqlDataAdapter
填充它。您的
XML
数据将被分成多行

比如说

string xmloutput=”“;
var cmd=新的SqlCommand(“,con);
var da=新的SqlDataAdapter(cmd);
var dt=新数据表();
da.填充(dt);
如果(dt.Rows.Count>0)
foreach(数据行dr在dt.行中)
{
xmloutput+=dr[0].ToString();
}
注意:

  • 上面的代码假设只有一列从
    DB
    返回,其中包含
    XML
    数据

稍后,使用变量
xmloutput

,我想在上面的答案中添加一个快速的加法。将SSMS 2017工具>选项>查询结果>SQL Server>结果中的设置更改为Grid works。但是,您必须完全关闭SSMS并重新打开它,设置才能生效。

可能仅适用于MS SQL 2008或更早版本。MS SQL 2012将切断它:这让我避免使用XmlReader。这个答案对我来说非常有用,应该标记为答案。非常好!谢谢,小费很好!注意:仅当SQL Server 2014 SSMS设置为“查询结果到网格”(ctrl+d)时有效。“到文件”或“到文本”不起作用。因此,我将从网格单元格复制/粘贴到编辑器中。请查看是否需要使用XMLNAMESPACES作为前缀,因为在这种情况下set=(…)语法不起作用。请确保重新启动SSMS Management Studio以使这些更改生效。如果添加示例,我将为您提供+1
string xmloutput = "";
var cmd = new SqlCommand("<some sql query that returns data in xml format>", con);
var da = new SqlDataAdapter(cmd);
var dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count > 0)
    foreach (DataRow dr in dt.Rows)
    {
        xmloutput  += dr[0].ToString();
    }