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になるとは思ってなくて見事にはまってしまいました。
#だれもまともに理解できないのではないかこのエントリは(^^;;; 駄文でごめんちゃい