Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用SQLCMD从存储过程保存XML时出现问题_Sql Server_Xml_Stored Procedures_Sqlcmd - Fatal编程技术网

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

Sql server 使用SQLCMD从存储过程保存XML时出现问题,sql-server,xml,stored-procedures,sqlcmd,Sql Server,Xml,Stored Procedures,Sqlcmd,我正在运行一个存储过程,该过程生成一个XML列,我想从sqlcmd将其保存为XML文件 我遇到的问题是XML的格式不正确,例如,如果XML元素中包含大量信息,那么在所有信息进入元素之前,它就会被切断 另一个问题是整个XML文件本身不够长。我有大约26000行需要放入XML文件中,只有大约600行需要放入我正在运行的XML文件中 这是我正在运行的存储过程: CREATE PROCEDURE usp_MyProc AS ;WITH XMLNAMESPACES( 'Products' AS p

我正在运行一个存储过程,该过程生成一个XML列,我想从
sqlcmd
将其保存为XML文件

我遇到的问题是XML的格式不正确,例如,如果XML元素中包含大量信息,那么在所有信息进入元素之前,它就会被切断

另一个问题是整个XML文件本身不够长。我有大约26000行需要放入XML文件中,只有大约600行需要放入我正在运行的XML文件中

这是我正在运行的存储过程:

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将对此进行分类,但我将其放在存储过程和
SQLCMD
中,但它无法识别它


非常感谢您的帮助。

我已经设法解决了这个问题。我在查询中使用了一个输入文件来生成XML,然后将输出文件保存为XML文档

输入文件以使用[MyDatabase]
时的
:XML开始,然后是返回XML的查询

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

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

目前没有时间测试这一点,但通常情况下:1)不应使用SP进行纯读取,请尝试创建一个返回XML的标量函数,并使用
SELECT dbo.MyFunction()
调用它。2) 您使用的是名称空间“p:”如果没有
和XMLNAMESPACES
,我怀疑这会起作用。3) 设置一个
,在
,ROOT()
后面键入
,这可能会有帮助,我正在使用XMLNAMESPACES,我只是忘记将它复制到这个文件中,我将编辑并放入。我也会试试你的推荐。谢谢