中の技術日誌ブログ

C#とC++/CLIと
VBと.NETとWindowsで戯れる
 

目次

Blog 利用状況

ニュース

自己紹介

東京でソフトウェアエンジニアをやっています。
お仕事大募集中です。
記事執筆や、講師依頼とかでも何でもどうぞ(*^_^*)
似顔絵 MSMVPロゴ
MSMVP Visual C# Since 2004/04-2013/03

記事カテゴリ

書庫

日記カテゴリ

00-整理

01-MSMVP

OPENXMLの罠

SQLServerを古臭いDBと思っちゃいけませんよ。

べたなテーブル供給装置として使っちゃいけませんよ。

今日はOPENXMLのお話

http://msdn2.microsoft.com/ja-jp/library/ms186918.aspx

SQL Serverではデータ型としてXMLを使えます。非常に複雑なパラメータ。任意個のパラメータなどはこのXMLにすることで、なんとでも中で取り出すことができます。

複雑な(複数のテーブルに対して、100行も200行も同時に更新するとか)更新をプログラム側で行うとかなーり辛いことになります。

SQL Serverではトランザクションを1ミリ秒でも短くすることにしのぎを削らないといけないですから、Server内で完結させることが重要です。

サンプルはリンク先を見てもらうとして、

SELECT * FROM OPENXML (@idoc, '/ROOT/Customer',1) WITH (CustomerID varchar(10), ContactName varchar(20))

こういうSELECT文を書くと結果セットとしてテーブルを取り出すことができます。

@xml.queryでXQUERYなんかも使えるのですが、型変換がどうにも苦手なようで、XQUERYで抜き出したノードに対してOPENXMLしています。

ただこのOPENXML微妙な動きをしてくれます。

<Element><Element>

をnvarcharなどで取り出すと''になり、intで取り出すと0になります。

nullにするためにはElementを書いちゃいけないと。

さすがに0になるとは思ってなくて見事にはまってしまいました。

#だれもまともに理解できないのではないかこのエントリは(^^;;; 駄文でごめんちゃい

投稿日時 : 2007年1月18日 23:45

コメントを追加

# re: OPENXMLの罠 2007/01/19 15:54 choir

OPENXMLの罠といえば、(型指定されたDataSet).GetXmlで取得したXMLを
そのままでは解釈出来ない罠もあったような気がします。

GetXmlで取得される以下のようなXMLはOPENXMLで解釈出来ないっぽいんですよね
<hoge xmlns="http://tempuri.org/hoge.xsd">

</hoge>

その場しのぎでxmlns= -> xmlns:= とReplaceしてからパラメータに設定していますが、
何かもっと良い方法は無いものでしょうか?

# re: OPENXMLの罠 2007/01/19 16:19 choir

あと、↓のような値も
'2007-01-04T00:00:00+09:00'
OPENXMLでDateTime型に変換失敗しますね(--;

要素名が日本語のときに解釈失敗することもあったような気が。

OPENXMLは便利だけど、便利だけど…

# bKpwuPHiyzfUVxH 2014/08/04 4:14 http://crorkz.com/

2HaA2T Im grateful for the blog post.Really looking forward to read more. Great.

# udyzQacBuKUJ 2014/09/18 15:58 http://httpionafrica.info/story.php?id=22502

SziCuQ A round of applause for your article.Much thanks again.

# lGfxGWoZytCzv 2015/04/17 23:52 sally

GcXwhL http://www.FyLitCl7Pf7kjQdDUOLQOuaxTXbj5iNG.com

タイトル
名前
URL
コメント