Обработка пустых элементов, как аннулирует в функции OPENXML SQL Server

У меня есть следующее (высоко упрощенный) 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 рассматривать пустые поля как ПУСТОЙ УКАЗАТЕЛЬ и не преобразовывать его для обнуления по умолчанию?

6
задан Kevin Albrecht 21 May 2010 в 16:27
поделиться

1 ответ

Так как ни у кого нет идей, вот как я "решаю" это, хотя мне это кажется хакерским:

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
6
ответ дан 8 December 2019 в 14:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: