SQL Server Bcp导出XML格式

时间:2014-04-27 08:55:28

标签: sql-server xml bcp

我有一个存储过程,生成具有FOR XML功能的XML。当我运行存储过程时,我得到格式精美的XML。

当我尝试将此结果导出到带有bcp的文件

declare @sql varchar(8000)
select @sql = 'bcp "exec sp_ExportXml" queryout C:\Filename.xml -S (local) -T -w'
exec master..xp_cmdshell @sql

我在xml标记内部使用换行符格式错误,例如

<Division>3</Divi
sion>

我完全无能为力,我为bcp queryout尝试了几个不同的参数,但总是得到相同的结果。

任何想法都非常感谢!感谢

5 个答案:

答案 0 :(得分:8)

这里的简单解决方案是使用-r开关吗?

我遇到了同样的问题,并且认为必须有一个简单的答案,经过一些搜索,我给它一个去,它对我有用。

选择@sql ='bcp“exec sp_ExportXml”queryout C:\ Filename.xml -S(local)-T -w -r'

道歉,如果你已经尝试过这个,但据我所知,远非BCP专家,上面的例子将覆盖行终结器将没有任何东西,因此在元素标签的中间没有狡猾的换行符。

答案 1 :(得分:1)

我遇到了类似的问题,这是因为他返回的结果column_width大小的大小,我认为他的默认宽度是2034,你可以使用SQLCMD命令并设置-w属性来克服这个。

此链接可能会有所帮助, http://connect.microsoft.com/SQLServer/feedback/details/786004/sqlcmd-with-xml-on-break-lines-on-large-output

答案 2 :(得分:1)

我可以通过不使用bcp来解决这个问题,而是按照此处的建议在SqlCommand上运行ExecuteXmlReader:http://support.microsoft.com/kb/310378

答案 3 :(得分:1)

这是powershell脚本,能够将xml输出到文件中,而不会在2034字符后插入换行符:

# Retrieving XML Data Through an XML Reader
# Create SqlConnection object and define connection string
$con = New-Object System.Data.SqlClient.SqlConnection
$con.ConnectionString = "Server=your.servername.local\yourInstanceName;Database=yourDBname;Integrated Security=True"
$con.open()

# Create SqlCommand object, define command text, and set the connection
$cmd = New-Object System.Data.SqlClient.SqlCommand
$cmd.CommandText = "EXEC your query"
$cmd.Connection = $con

# Create XmlReader
$xr = $cmd.ExecuteXmlReader()

# Create XmlDataDocument object for dataset
$xd = New-Object System.Xml.XmlDataDocument

# Load the XML data document
$xd.Load($xr)

# Close the DataReader and the connection
$xr.Close()
$con.Close()

$xd.InnerXml > .\yourFileName.xml

答案 4 :(得分:-1)

实际上,据我所知,SQL Server不会在生成的XML中插入任何换行符。它在SSMS中看起来格式化的事实是因为SSMS很好地格式化它。 IOW,演示文稿取决于使用的编辑器。

如果您确实遇到过SQL Server插入换行符的情况,那么这将是一个错误,也是一个非常严重的错误。