.NETでXMLを活用していきます。

SQL ServerでXQueryするには?(準備編1)

»

気になるXQuery

 近、「XQuery」が気になっています。

 現在、「XPath」を使用していて、特に不自由はしていません。しかし理由もなく、「XQuery」がこの世の中に生まれてくるわけがありません。

XML DBっていっても色々ありますね

 XML Databaseについては、このサイトが便利です。アイティメディアも企画協力しています。

 て、勉強用のXQuery実行環境をどうするのか? 1週間くらい悩みました。XQueryするならやはりXMLネイティヴのデータベースがいいのか? それともハイブリッドのデータベースがいいのか?

 局、普段使用しているハイブリッドのSQL Serverで実行することにしました。

結果をXMLで取得する

 XQueryを実行するためには、当然XMLが必要です。SQL Serverでは、XMLを得る方法が2つ用意されています。

 1つ目は、XML型のフィールドを定義すること。

 2つ目は、魔法のことば「FOR XML PATH」を使うこと。今回はこちらを採用します。

サンプルテーブル

 んな感じの、TAX(消費税マスタ)テーブルを作っておきました。

TAXCODE TAXNAME TAXRATE MODIFIED
0 非課税 0 2000/01/01 0:00:00
1 課税 5 2001/01/01 0:00:00
8 旧消費税 3 2008/01/01 0:00:00
9 その他 NULL 2009/01/01 0:00:00

XMLにしてしまえ

 、実際にやってみました。

1
2
3
4
5
SELECT
    *
FROM
    TAX
FOR XML PATH

 行。F5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<row>
    <
TAXCODE>0</TAXCODE>
    <
TAXNAME>非課税</TAXNAME>
    <
TAXRATE>0</TAXRATE>
    <
MODIFIED>2000-01-01T00:00:00</MODIFIED>
</
row>
<
row>
    <
TAXCODE>1</TAXCODE>
    <
TAXNAME>課税</TAXNAME>
    <
TAXRATE>5</TAXRATE>
    <
MODIFIED>2001-01-01T00:00:00</MODIFIED>
</
row>
<
row>
    <
TAXCODE>8</TAXCODE>
    <
TAXNAME>旧消費税</TAXNAME>
    <
TAXRATE>3</TAXRATE>
    <
MODIFIED>2008-01-01T00:00:00</MODIFIED>
</
row>
<
row>
    <
TAXCODE>9</TAXCODE>
    <
TAXNAME>その他</TAXNAME>
    <
MODIFIED>2009-01-01T00:00:00</MODIFIED>
</
row>

 んと! 第1階層に「row」が4つで取得されました。

 XMLでは、第1階層は「ルート」と呼ばれ、複数のルートがあってはならないのです。つまりこのXMLは、不正なXMLです。

ルートを追加する

 ートを追加してみよう。やり方は「PATH」の後ろに、カンマで区切って「ROOT」と記述します。

1
2
3
4
5
SELECT
    *
FROM
    TAX
FOR XML PATH, ROOT

 ざ実行だ。F5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<root>
    <
row>
        <
TAXCODE>0</TAXCODE>
        <
TAXNAME>非課税</TAXNAME>
        <
TAXRATE>0</TAXRATE>
        <
MODIFIED>2000-01-01T00:00:00</MODIFIED>
    </
row>
    <
row>
        <
TAXCODE>1</TAXCODE>
        <
TAXNAME>課税</TAXNAME>
        <
TAXRATE>5</TAXRATE>
        <
MODIFIED>2001-01-01T00:00:00</MODIFIED>
    </
row>
    <
row>
        <
TAXCODE>8</TAXCODE>
        <
TAXNAME>旧消費税</TAXNAME>
        <
TAXRATE>3</TAXRATE>
        <
MODIFIED>2008-01-01T00:00:00</MODIFIED>
    </
row>
    <
row>
        <
TAXCODE>9</TAXCODE>
        <
TAXNAME>その他</TAXNAME>
        <
MODIFIED>2009-01-01T00:00:00</MODIFIED>
    </
row>
</
root>

 きた(><)

 かし少々気になる点が……。その問題点と解決方法は、次回に続きます。

Comment(0)

コメント

コメントを投稿する