特定の文字列要素と数値要素に xsi:nil="true" を含む XML があります。次に例を示します。
declare @data xml
set @data = '<?xml version="1.0" encoding="utf-8"?>
<collection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<item>
<stringprop1>foo</stringprop1>
<stringprop2 xsi:nil="true" />
<decimalprop3 xsi:nil="true" />
</item>
</collection>'
SQL Server 2008 R2 でその XML を照会したいと考えています。私は OPENXML を使用していますが、10 進数型ではうまく機能しません。書きたいコードは次のとおりです。
declare @doc int
exec sp_xml_preparedocument @doc OUTPUT, @data;
select
stringprop1,
stringprop2,
decimalprop3
from openxml(@doc, '/collection/item', 2)
with
(
stringprop1 nvarchar(50)
,stringprop2 nvarchar(50)
,decimalprop3 decimal(18, 5)
)
exec sp_xml_removedocument @doc;
これは、nvarchar を 10 進数に変換することについて文句を言います。いくつかハッキングした後、私はこれにたどり着きました:
exec sp_xml_preparedocument @doc OUTPUT, @data;
select
nullif(stringprop1, '') as stringprop1,
nullif(stringprop2, '') as stringprop2,
convert(decimal(18, 5), nullif(decimalprop3, '')) as decimalprop3
from openxml(@doc, '/collection/item', 2)
with
(
stringprop1 nvarchar(50)
,stringprop2 nvarchar(50)
,decimalprop3 nvarchar(50)
)
exec sp_xml_removedocument @doc;
どちらでもいいと思います。しかし、xsi:nil が NULL を意味し、文字列だけでなく 10 進数でも問題ないことを OPENXML に伝える方法はありますか?