2016-04-29 31 views
2

sqlcmdからXMLファイルとして保存する単一のXML列を生成するストアドプロシージャを実行しています。SQLCMDを使用してストアドプロシージャからXMLを保存するときの問題

私が抱えている問題は、たとえば、XML要素に多くの情報が含まれていて、すべての情報が要素に入る前に切り捨てられると、XMLが適切にフォーマットされていないことです。

もう1つの問題は、XMLファイル全体が十分に近いところにないことです。 XMLファイルに格納する必要がある行は約26000行あり、実行中の行には約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の両方に入れましたが、それを認識しません。

何か助けていただければ幸いです。

+0

は、現時点ではこれをテストする時間がない正常に動作しますが、一般的にはプロンプト:1)純粋な読書をして行われるべきではありませんSP、XMLを返すスカラー関数を作成し、 'SELECT dbo.MyFunction()'で呼び出そうとします。 2)あなたは名前空間 "p:"を使用していますが、これはWITH XMLNAMESPACESなしではうまくいかないでしょう。 3) '、TYPE'を' ROOT() 'の後ろに設定するのに役立つかもしれません。 – Shnugo

+0

WITH XMLNAMESPACESを使用しています。これをコピーして忘れました。私は編集して入れます。 。ありがとう – Cornflake2068

答えて

1

私はこれを理解することができました。私は、XMLを生成するためにクエリと入力ファイルを使用し、XMLドキュメントとして出力ファイルを次に保存します。

入力ファイルは:XML ON USE [MyDatabase]で始まり、次にXMLを返すクエリです。 SSMSで

は、これは、不正な構文を示していますが、コマンドによって実行されるとき、それは

sqlcmd -S "ServerName" -d "DatabaseName" -i "C:\Temp\xmltest.sql" -o "C:\temp\results.xml" 
関連する問題