我有一个存储过程,生成具有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
尝试了几个不同的参数,但总是得到相同的结果。
任何想法都非常感谢!感谢
答案 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属性来克服这个。
答案 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插入换行符的情况,那么这将是一个错误,也是一个非常严重的错误。