【问题标题】:Issue when using SQLCMD to save XML from stored procedure使用 SQLCMD 从存储过程中保存 XML 时出现问题
【发布时间】:2016-04-29 08:01:17
【问题描述】:

我正在运行一个存储过程,它生成一个 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) 纯阅读不应该用SP来做,尝试创建一个返回XML的标量函数并用SELECT dbo.MyFunction()调用它。 2)您使用的是命名空间“p:”我怀疑如果没有WITH XMLNAMESPACES,这将起作用。 3)在,ROOT()后面设置,TYPE可能会有所帮助
  • 我正在使用 WITH XMLNAMESPACES,我只是忘记将它复制到这里,我将编辑并放入它。我也会尝试你的建议。谢谢

标签: sql-server xml stored-procedures sqlcmd


【解决方案1】:

我已经设法弄清楚了。我使用带有查询的输入文件来生成 XML,然后将输出文件保存为 XML 文档。

输入文件以:XML ON USE [MyDatabase] 开头,然后是返回 XML 的查询。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多