Sql server 使用SQLCMD从存储过程保存XML时出现问题
我正在运行一个存储过程,该过程生成一个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
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,我只是忘记将它复制到这个文件中,我将编辑并放入。我也会试试你的推荐。谢谢