我正在运行一个存储过程,它生成一个XML列,我想将其保存为sqlcmd
的XML文件。
我遇到的问题是XML没有正确格式化,例如,如果XML元素中包含大量信息,它将在所有信息进入元素之前切断。
另一个问题是,整个XML文件本身并不足够长。我有大约26000行需要放入XML文件中,并且我正在运行的内容中只有大约600行。
这是我正在运行的存储过程:
CREATE PROCEDURE usp_MyProc
AS
;WITH XMLNAMESPACES( 'Products' AS p )
SELECT
ProductID
, ProductName
, Photo
, Price
, Attribute1 AS [p:attribute/@name]
, ISNULL( p.Attribute1Value, '' ) AS [p:attribute]
, ''
, Attribute2 AS [p:attribute/@name]
, ISNULL( Attribute2Value, '' ) AS [p:attribute]
, ''
, Attribute3 AS [p:attribute/@name]
, ISNULL( Attribute3Value, '' ) AS [p:attribute]
, ''
, Attribute4 AS [p:attribute/@name]
, ISNULL( Attribute4Value, '' ) AS [p:attribute]
, ''
FROM MyDatabase.dbo.MyTable
FOR XML PATH( 'Item' ), ROOT( 'Products' )
这是我从命令提示符运行的SQLCMD:
sqlcmd -S "MyServer" -d "MyDatabase" -E -Q "EXEC usp_MyProc" -o "C:\temp\Test.xml" -W
我已经在一些地方读过:XML ON
会对此进行排序,但我已将其放在存储过程和SQLCMD
中,但它无法识别它。
感谢任何帮助。
答案 0 :(得分:1)
我已经成功解决了这个问题。我使用带有查询的输入文件生成XML,然后将输出文件保存为XML文档。
输入文件以:XML ON USE [MyDatabase]
开头,然后是查询以返回XML。
在SSMS中,这显示为不正确的语法,但是当它通过命令提示符运行时,它可以正常工作
sqlcmd -S "ServerName" -d "DatabaseName" -i "C:\Temp\xmltest.sql" -o "C:\temp\results.xml"