2012-01-16 8 views
3

私は一日中、xpath/xqueryをSQL Serverクエリの一部として使用してXMLデータ列の値を無駄に返す良い例を探していました。SQL Serverテーブルのすべての行について、XML列の特定の属性の値を返すにはどうすればよいですか?

ここで私がやろうとしていることがあります。私は、テーブル内のXMLデータ列に次のXMLを持っている:私はDocumentノードのID属性の値を返しますSQL Serverのクエリを記述しようとしている

<Document ID="156"> 
    <Version>1.0</Version> 
    <LastModifiedInVersion>1.0</LastModifiedInVersion> 
    <Signatures /> 
    <Controls> 
    <Control ID="TB1"> 
     <Value>Hello world!</Value> 
    </Control> 
    </Controls> 
    <AutoKeys /> 
</Document> 

。私はテーブル内のすべての行に対してこれを行い、すべてのXMLデータはまったく同じ形式で開始します。

ご協力いただければ幸いです!私は本当にきれいな例が必要なだけで、そこから取ることができます!

答えて

8

これは、テーブルのXML列のXML全体ですか?その場合

、このような使用:.value()呼び出しは基本的に、その最初のパラメータとしてXPathをとり、その2番目のパラメータとしてT-SQLの型、としてそのXML値を返し

SELECT 
    (list of other columns), 
    XmlColumn.value('(/Document/@ID)[1]', 'int') AS 'DocumentID' 
FROM 
    dbo.YourTable 

をクエリに与えられたT-SQLデータ型

+2

0即座にそれを照会 - 私はあなたを思い出すように見える:) – JNK

+0

任意の票を持っていた場合、私はupvoteだろうルート要素から属性を取得できません。 –

+0

@JeremyHolovacs:あなたは本当ですか???それは私のマシン上のSQL Server 2008 R2(Mgmt Studio)でうまく動作します....試してみてください! –

0
SELECT xmlcol.value('(//Document/@ID)[1]','int') AS DocID FROM xmltable 
1

あなたのXMLが通常の文字列としてデータベースに保存されている場合は、変換し

SELECT CONVERT(XML, [XMLStringColumn]).value('(/Document/@ID)[1]', 'int') 
FROM yourTable