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

时间:2016-04-29 08:01:18

标签: sql-server xml stored-procedures sqlcmd

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

感谢任何帮助。

1 个答案:

答案 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"