1

私のデータベース(GoogleSEOData)には、1つのテーブル(GoogleMarkupList)があり、以下のサンプルデータがテーブルにあります。

PUBLICATION_ID  |   PAGEID  |   URL
-------------------------------------------------------------
233             |   654345  |   /english/index.aspx
345             |   654345  |   /de/english/index.aspx
432             |   654345  |   /ru/russian/index.aspx
533             |   654345  |   /ae/arabic/index.aspx
233             |   452323  |   /english/offers.aspx
345             |   452323  |   /de/english/offers.aspx
432             |   452323  |   /ru/russian/offers.aspx
533             |   452323  |   /ae/arabic/offers.aspx
233             |   834343  |   /english/destinations.aspx
345             |   834343  |   /de/english/destinations.aspx
432             |   834343  |   /ru/russian/destinations.aspx
533             |   834343  |   /ae/arabic/destinations.aspx

次に、サーバーのファイルパスを入力として受け取り(D:// GoogleMarkup)、サーバー上に以下のタイプのXMLファイルを作成するSQLプロシージャを記述します(上記のサンプルデータの場合)。

654345タイプのデータのXMLファイルの名前は次のようになります654345.XML

<ps>
<p n="233" u="/english/index.aspx" />
<p n="345" u="/de/english/index.aspx" />
<p n="432" u="/ru/russian/index.aspx" />
<p n="533" u="/ae/arabic/index.aspx" />
</ps>

452323タイプのデータのXMLファイルの名前は次のようになります452323.XML

<ps>
<p n="233" u="/english/offers.aspx" />
<p n="345" u="/de/english/offers.aspx" />
<p n="432" u="/ru/russian/offers.aspx" />
<p n="533" u="/ae/arabic/offers.aspx" />
</ps>

834343タイプのデータのXMLファイルの名前は次のようになります834343.XML

<ps>
<p n="233" u="/english/destinations.aspx" />
<p n="345" u="/de/english/destinations.aspx" />
<p n="432" u="/ru/russian/destinations.aspx" />
<p n="533" u="/ae/arabic/destinations.aspx" />
</ps>

私はユーティリティがあることを知っています

SQLCMD -S Server -d Database -E -v pageid=%pid% 
       -Q "Select publication_id as [n], url  from table as [p] where pageid=$(pageid) for xml auto, root('ps')" 
       -o D://GoogleMarkup/%pid%.xml

しかし、すべてのXMLを一度に作成して、pageidを1つずつ読み取り、SQLCMDXMLを作成するために渡す方法については、カーソルを書き込む必要がありますか。適切なコードサンプルを使用して提案してください。

提案してください!!

4

1 に答える 1

3

SP を作成してコマンドを繰り返し実行し、XML ファイルを作成できます。

重要: sqlcmd ユーティリティでは、単一行で :XML ON sqlcmd コマンドが必要です。

:XML ONsqlcmd コマンドがない場合、結果は次のようになります。

XML_F52E2B61-18A1-11d1-B105-00805F49916B
---------------------------------------------------
0x440249004400440546006C006F00610074004408440061007...

(1 rows affected)

これが、インライン SQL クエリを使用して、sqlcmd を使用してデータを xml にエクスポートできない理由です。

ただしbcp、インライン SQL クエリにはユーティリティを使用できます。

CREATE PROCEDURE [dbo].[DO_XML]
AS 

Declare @PAGEID int
, @PAGEID_TEXT varchar(100)
, @CMD varchar(2000)
, @FILE varchar(100)

-- local cursor to cycle
DECLARE cXML CURSOR LOCAL FAST_FORWARD FOR
SELECT  PAGEID from GoogleMarkupList with (NOLOCK) group by PAGEID  

OPEN cXML

    FETCH NEXT FROM cXML INTO @PAGEID
    WHILE @@FETCH_STATUS = 0

    BEGIN
        set @PAGEID_TEXT = cast(@PAGEID as varchar(100))

        -- dynamic command to create XML
        -- MUST BE ALL IN 1 LINE
        set @CMD = 'bcp "Select publication_id as [n], url  from GoogleSEOData.dbo.GoogleMarkupList as [p] where pageid='+ @PAGEID_TEXT +' FOR XML AUTO, ELEMENTS, ROOT(''ps'')"  queryout E:\GoogleMarkup\'+@PAGEID_TEXT+'.XML -S MANOJ-PC\KRISH -T -c'

        -- do it
        exec master..xp_cmdshell @CMD, no_output

        FETCH NEXT FROM cXML INTO @PAGEID

END    
CLOSE cXML
DEALLOCATE cXML

この SP は、すべての XML ファイルを作成することによってテストされ、正常に動作します。

コマンドラインはどうですか?

ここに例:

bcp "Select publication_id as [n], url  from GoogleSEOData.dbo.GoogleMarkupList as [p] where pageid=452323 FOR XML AUTO, ELEMENTS, ROOT('ps')" queryout E:\GoogleMarkup\452323.xml -S GoogleSEOData -T -c

詳細情報: bcp/sqlcmd ユーティリティと XML を使用した SQL Server エクスポート

それが役立つことを願っています

于 2012-05-26T11:23:51.457 に答える