元ネタ
SQL文のFOR XMLについて - Database Expert会議室
最近似た様なの SELECT の結果を XML にして返す - お だ のスペース を書いたばっかりなので、気になって調べてみた。
MSDN FOR XML 句の基本構文
MSDN XSINIL パラメータを使用した NULL 値に対する要素の生成
ELEMENTS XSINIL を付与すると、要素の属性として、xsi:nil="true" としてくれる。
SELECT * FROM [TestTable] FOR XML AUTO
<TestTable Id="1" Name="aaa" /> <TestTable Id="2" Name="bbb" /> <TestTable Id="3" /> <TestTable Id="4" Name="hoge" />SELECT * FROM [TestTable] FOR XML AUTO, ELEMENTS XSINIL
<TestTable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Id>1</Id> <Name>aaa</Name> </TestTable> <TestTable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Id>2</Id> <Name>bbb</Name> </TestTable> <TestTable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Id>3</Id> <Name xsi:nil="true" /> </TestTable> <TestTable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Id>4</Id> <Name>hoge</Name> </TestTable>
結構出力結果が変わりますね…。ISNULL を使うとこんな感じ。
SELECT ISNULL([Id], 'NULL') as [Id], ISNULL([Name], 'NULL') as [Name] FROM [TestTable] FOR XML AUTO
<TestTable Id="1" Name="aaa" /> <TestTable Id="2" Name="bbb" /> <TestTable Id="3" Name="NULL" /> <TestTable Id="4" Name="hoge" />