2017-02-21 9 views
0

私はこれで初めてです。いくつかのXMLデータをMicrosoft SQL Serverに転送しようとしています。私は、列の内容が静的ではないため、このデータを要素ではなく要素として転送する必要があると仮定しています。xmlデータを要素(属性ではなく)としてSQLに転送しようとしています

しかし、何らかの理由でデータを要素として転送しようとすると、NULL値が返されます。しかし、私が属性と同じデータを転送しようとすると、それは動作し、それが想定されているように見えます。私は肩をすくめてただ歩いていくように誘惑されますが、私が後でそれをやってしまうと、私のために物事がうまくいかないかもしれないと心配しています。

私は既にこのXMLからいくつかの属性を持っています。これらの属性は、属性として単一のテーブルに偽装されているこれらの要素と組み合わせることを計画しています。それは働くでしょうか?そしてもしそれがあれば、道路に問題があるでしょうか?ここで

私は要素としての要素を転送しようとすると、私のSQLコードは次のとおりです。私は、属性などの要素を転送しようとしたときにここで

SELECT * 
FROM OPENXML (@hdoc, '/roll/voter', 2) 
WITH (
id int, 
[value] char(50), 
[state] char(2)) 

は私のSQLコードです:ここで

SELECT * 
FROM OPENXML (@hdoc, '/roll/voter', 1) 
WITH (
id int, 
[value] char(50), 
[state] char(2)) 

ですXML文書の小型化されたバージョン:

<roll> 
<voter id="400048" value="Yea" state="FL" /> 
<voter id="412516" value="Yea" state="CA" /> 
</roll> 

ここではxml dへのリンクですグーグル・ドライブ(非常に小さなXML)経由]で文書:https://drive.google.com/open?id=0B5VgOwWcGeLHaWctRU56Qlk3UWM

A screenshot of my SQL query, the table results, and the XML

+0

あなたが達成しようとしていることはよく分かりませんが、最初のものの正しい構文は 'FROM OPENXML(@hdoc、 '/ roll/voter'、2)WITH(ID int '@id'、[value] char(50) '@value'、[state] char(2) '@state') 'のようなものです。 – ZLK

+0

@ZLK エイリアスを使用して、転送を要素として機能させることができました。要素を機能させるにはエイリアスが必要ですが、属性には不要ですか? –

+0

最初のクエリにエイリアスが必要な理由がわかりません。 –

答えて

1

FROM OPENXMLは時代遅れで、もはや使用すべきではない(稀な例外が存在する)...

実際のXML法で試してみてください。

DECLARE @xml XML= 
N'<roll> 
<voter id="400048" value="Yea" state="FL" /> 
<voter id="412516" value="Yea" state="CA" /> 
</roll>'; 

SELECT @xml.value(N'(/roll/voter/@id)[1]',N'int') AS voter_id 
     ,@xml.value(N'(/roll/voter/@value)[1]',N'nvarchar(max)') AS voter_value 
     ,@xml.value(N'(/roll/voter/@state)[1]',N'nvarchar(max)') AS voter_state 

結果

voter_id voter_value voter_state 
400048  Yea   FL 
関連する問題