У меня есть следующее (высоко упрощенный) XML-документ, который я читаю в свою базу данных с помощью функции OPENXML:
<root>
<row>
<bar>123</bar>
</row>
<row>
<bar>0</bar>
</row>
<row>
<bar></bar>
</row>
</root>
Я импортирую в в базу данных как так:
insert into [Foo]
([bar])
select
ds.[bar]
from openxml(@xmlHandle, 'root/row', 2)
with ([bar] int) ds
Проблема состоит в том, что OPENXML преобразовывает пустые поля с типом данных int для обнуления, таким образом, это вставляется в мою таблицу:
bar
----
123
0
0
То, что я хочу вставленный в мою таблицу:
bar
----
123
0
NULL
Как я заставляю функцию OPENXML рассматривать пустые поля как ПУСТОЙ УКАЗАТЕЛЬ и не преобразовывать его для обнуления по умолчанию?
Так как ни у кого нет идей, вот как я "решаю" это, хотя мне это кажется хакерским:
insert into [Foo]
([bar])
select
isnull(ds.[bar], '') when '' then null else CAST(ds.[bar] as int) end
from openxml(@xmlHandle, 'root/row', 2)
with ([bar] nvarchar(20)) ds