首页 > 解决方案 > XML 输出在文件中被截断,但在 SSMS 中不被截断

问题描述

在参考了这两个帖子之后 - XML 输出在 SQL 中被截断,使用SQL Server 中的 XML OPTIONS 生成 XML 输出

并在 SQL Server Management Studio (SSMS) 中设置为 - SSMS 中的选项设置以将 XML 输出数据设置为无限大小。

DECLARE @xmldata xml
SET @xmldata = (
SELECT 
'DATE' as 'column/@name', [DATE] as 'column', null, 
'ID' as 'column/@name', [ID] as 'column', null, 
'NAME' as 'column/@name', [NAME] as 'column', null
FROM TEST_TBL
FOR XML PATH('row'), ROOT('resultset')
)
SELECT @xmldata AS returnXML

SSMS 中的 XML 输出是可以的。但是如果我运行 SQLCMD.EXE 来生成如下的 XML 输出文件,

DECLARE @xmldata xml
SET @xmldata = (
SELECT 
'DATE' as 'column/@name', [DATE] as 'column', null, 
'ID' as 'column/@name', [ID] as 'column', null, 
'NAME' as 'column/@name', [NAME] as 'column', null
FROM TEST_TBL
FOR XML PATH('row'), ROOT('resultset')
)
SELECT @xmldata AS returnXML
:OUT abc.XML
GO

输出文件 - abc.XML 在单行中被截断,长度为 1,048,578。

有没有办法将 XML 输出文件 - abc.XML 设置为 SSMS 中的“无限”大小?

谢谢你的帮助!

标签: sqlsql-serverxml

解决方案


DECLARE @Path VARCHAR(4000), @AUTCMD VARCHAR(4000), @XMLCMD VARCHAR(4000)
SET @Path = 'YourPathHere'
SET @AUTCMD = 'net use ' + @Path + ' YourPasswordHere /USER:YourUserNameHere' 
SET @XMLCMD = 'bcp "DECLARE @xmldata xml SET @xmldata = (SELECT ''DATE'' as ''column/@name'', [DATE] as ''column'', null, ''ID'' as ''column/@name'', [ID] as ''column'', null, ''NAME'' as ''column/@name'', [NAME] as ''column'', null FROM TEST_TBL FOR XML PATH(''row''), ROOT(''resultset'')) SELECT @xmldata AS returnXML" queryout "' + @Path + '\abc.XML" -S ' + @@SERVERNAME + ' -T -c'


exec xp_cmdshell @AUTCMD
exec xp_cmdshell @XMLCMD

推荐阅读