使用 SQLCMD 从存储过程保存 XML 时出现问题

Issue when using SQLCMD to save XML from stored procedure

我是 运行 一个存储过程,它生成单个 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 中,但它无法识别它。

感谢任何帮助。

我已经弄明白了。我使用带有查询的输入文件来生成 XML,然后将输出文件另存为 XML 文档。

输入文件以:XML ON USE [MyDatabase]开头然后查询到return XML.

在 SSMS 中,这显示为不正确的语法,但当它通过命令提示符运行时,它工作正常

sqlcmd -S "ServerName" -d "DatabaseName" -i "C:\Temp\xmltest.sql" -o "C:\temp\results.xml"