2017-10-11 4 views
0

何らかの理由で行がXML形式のテーブルがあります。SQL ServerでOpenXMLを使用する

これらの行を解析し、XML自体から新しいテーブルを作成する必要があります。

これは、SQL ServerにはOpenXMLがあります。私はSQL Server 2016 SP1のバージョンで作業しています。

私は上記のリンクからXMLを使用する方法について説明したが、次のとおりです。

DECLARE @idoc int, @doc varchar(1000); 

コマンド(複数可)正常に完了しました。

次のコマンドを実行します。このため

SET @doc =' 
<ROOT> 
<Customer CustomerID="VINET" ContactName="Paul Henriot"> 
    <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00"> 
     <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/> 
     <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/> 
    </Order> 
</Customer> 
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez"> 
    <Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00"> 
     <OrderDetail OrderID="10283" ProductID="72" Quantity="3"/> 
    </Order> 
</Customer> 
</ROOT>'; 

私が手:

メッセージ137、レベル15、状態1、行1870
スカラー変数 "@doc" を宣言する必要があります。

私は上のコマンドで正常に宣言して以来、これは奇妙です。

そして今:

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc; 

メッセージ137、レベル15、状態2、行1887
はスカラー変数 "@idoc" を宣言する必要があります。

このエラーはどのように解決できますか?

+0

あなたが同じラインタイムコードで、行が1つの右ずつ実行されますが、 –

+0

@sarslanのすべてを実行する必要があります...私はすべてに置くと仮定します関数やストアドプロシージャでこれを... ...私はプロシージャとしてこれをすべて入れたい場合、少し助けてもらえますか? –

+0

@RajeshRonaldo、行は論理的な順序で実行されますが、スクリプト全体が最初に遵守される必要があります。現在のバッチの寿命を持つローカル変数を宣言しています。 – dbajtr

答えて

0

あなたはそれぞれの部分を個別に実行していますか?

1つのを実行スクリプトとして全部:

DECLARE @idoc int, @doc varchar(1000); 
SET @doc =' 
<ROOT> 
<Customer CustomerID="VINET" ContactName="Paul Henriot"> 
    <Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00"> 
     <OrderDetail OrderID="10248" ProductID="11" Quantity="12"/> 
     <OrderDetail OrderID="10248" ProductID="42" Quantity="10"/> 
    </Order> 
</Customer> 
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez"> 
    <Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00"> 
     <OrderDetail OrderID="10283" ProductID="72" Quantity="3"/> 
    </Order> 
</Customer> 
</ROOT>'; 
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc; 
GO 
+0

thx、これをすべてプロシージャとして入れる方法がもう1つあります。そのため、xml自体を渡して1回呼び出すことができますか? –

+0

'@ doc'として現在設定されているxmlを渡してもよろしいですか?次のようなものです:' CREATE PROCEDURE testproc @入力XML AS DECLARE @doc VARCHAR(1000); EXEC sp_xml_preparedocument @input OUTPUT、@doc; GO' – dbajtr

関連する問題