2

SQLCMDを使用して、データベースでストアドプロシージャを実行するプロセスを自動化しようとしています。SQL Server Management Studio 2008は、これがすべて実行されようとしているWindows Serverにインストールされます。SQLCMDはバッチスクリプトを介して呼び出され、ストアドプロシージャを実行し、出力をXMLファイルに保存するように指示されます。ストアドプロシージャには機密情報が含まれているため表示できませんが、FOR XML PATH('')の使用法が含まれています。

私はあらゆる種類のサイトからいくつかの記事を読みましたが、人々は:XML ONを使用して、表形式ではなく実際のXML形式で出力を取得し、「-h-1-y0」のスイッチを使用して確認するように言っています。出力が切り捨てられないこと。すべてを自動化できるように、バッチスクリプトを介してSQLCMDを実行しようとしています。

私の現在のバッチスクリプト(変数はすべてスクリプトのこの行の前に定義されています):

    sqlcmd -X -Q -h-1 -y 0 "EXEC %TransactionName%" -d %Database% -S %ServerInstance% -o "%OutFilename%_%currDATE%.xml"

トランザクションに:XML ONを追加し、次のような個別のSQLスクリプトを作成してみました。

    Run_Transact.sql
    :XML ON
    EXEC storedProcedure

したがって、バッチファイルは次のようになります。

    sqlcmd -X -Q -h-1 -y 0 -i runTransact.sql -d %Database% -S %ServerInstance% -o "%OutFilename%_%currDATE%.xml"

エラーが返されます:

HResult 0x80004005、レベル16、状態1説明は提供されていません

:XML ONを使用しない場合、表形式のように見える出力が得られ、ヘッダーと最初のレコードのみが含まれますが、すべてではありません(切り捨てられます)。

私の質問は、XMLファイルの出力を実際にXMLのように見せ、切り捨てられないようにするにはどうすればよいですか?

よろしくお願いします!

4

2 に答える 2

0

このアプローチは私にとってはうまくいきます。xml 列から 200 万行の xml を取得しました。私の手順:

1)クエリを使用してファイルを作成します。これは私のものです:

:XML ON
USE <DB_NAME>
SELECT TOP 1 <COLUMN_NAME> FROM <TABLE>
WHERE <SOMETHING>
FOR XML PATH('')

2) sqlcmd でコマンドを実行する

sqlcmd -d <DB_NAME> -i <PATH>\query.sql >result.txt

そして、必要なものを <> に置き換えます

あなたの場合、ストアドプロシージャがあります。多分それは問題を引き起こすでしょうか?しかし、次のようなことを試すことができます。

USE<DB_NAME>
DECLARE @XMLV XML
EXEC @XMLV = EXEC StoredProcedure
SELECT @XMLV
FOR XML PATH('')

質問がかなり古いことは知っていますが、誰かの助けになるかもしれません。

于 2015-06-11T13:10:12.770 に答える
-1
SELECT ( SELECT 'White' AS Color1,
'Blue' AS Color2,
'Black' AS Color3,
'Light' AS 'Color4/@Special',
'Green' AS Color4,
'Red' AS Color5
FOR
XML PATH('Colors'),
TYPE
),
( SELECT 'Apple' AS Fruits1,
'Pineapple' AS Fruits2,
'Grapes' AS Fruits3,
'Melon' AS Fruits4
FOR
XML PATH('Fruits'),
TYPE
)
FOR XML PATH(''),
ROOT('SampleXML')
GO
于 2014-04-04T09:53:36.030 に答える