Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 sp_xml_preparedocument и numeric в экпоненциальной форме  [new]
Nicola_r
Member

Откуда:
Сообщений: 12
Доброго дня, есть ХМЛ вида:
<ds>
  <t>
    <id>1</id>
    <sm>9.815715E-05</sm>
  </t>
</ds>
Нужно получить данные в столбцах: id,sm
Если sm имеет обычный формат числа, то все ок, если как в примере, то ошибка конвертации nvarchar в numeric.
Получаю таблицу след. образом:
declare @doc_ptr int
EXEC sp_xml_preparedocument @doc_ptr OUTPUT, @doc

select
  *
from openxml(@doc_ptr,N'/ds/t',1)
with (
  [id] int 'id',
  [sm] numeric(15,8) 'sm'
)

Эта проблема решаема?
Спасибо за внимание :)
14 окт 09, 15:53    [7785715]     Ответить | Цитировать Сообщить модератору
 Re: sp_xml_preparedocument и numeric в экпоненциальной форме  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Nicola_r,

Получать из xml, как varchar и потом явно применять convert.
14 окт 09, 15:55    [7785744]     Ответить | Цитировать Сообщить модератору
 Re: sp_xml_preparedocument и numeric в экпоненциальной форме  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Может, автора устроит так?
declare @x xml
set @x = '<ds><t><id>1</id><sm>9.815715E-05</sm></t></ds>'

select n.value('(id/text())[1]', 'int') as id
      ,n.value('(sm/text())[1]', 'float') as sm
  from @x.nodes('/ds/t') as t(n)

id          sm
----------- ----------------------
1           9.815715E-05

(1 row(s) affected)
а что делать чтобы было numeric(15,8) я не знаю,
потому что я не знаю что автору нужно сделать чтобы вместить 0.00009815715 в numeric(15,8)
(в смысле округлять, обрезать...)
14 окт 09, 16:03    [7785807]     Ответить | Цитировать Сообщить модератору
 Re: sp_xml_preparedocument и numeric в экпоненциальной форме  [new]
Glory
Member

Откуда:
Сообщений: 104760
select
  *
from openxml(@doc_ptr,N'/ds/t',1)
with (
  [id] int 'id',
  [sm] float 'sm'
)
14 окт 09, 16:04    [7785811]     Ответить | Цитировать Сообщить модератору
 Re: sp_xml_preparedocument и numeric в экпоненциальной форме  [new]
Nicola_r
Member

Откуда:
Сообщений: 12
DeColo®es,

ммм, маленько кривовато, но сдается мне, это единственный выход.
14 окт 09, 16:07    [7785853]     Ответить | Цитировать Сообщить модератору
 Re: sp_xml_preparedocument и numeric в экпоненциальной форме  [new]
Nicola_r
Member

Откуда:
Сообщений: 12
Паганель,

15,8 - не суть, обрежится под размер таблицы, и ладно. допустимая погрешность в моем случае.
14 окт 09, 16:10    [7785886]     Ответить | Цитировать Сообщить модератору
 Re: sp_xml_preparedocument и numeric в экпоненциальной форме  [new]
Nicola_r
Member

Откуда:
Сообщений: 12
Glory,

Вот! то что нужно, этот вариант идеальный для меня!
Преклоняюсь перед вашими познаниями в этой области!!!
14 окт 09, 16:15    [7785948]     Ответить | Цитировать Сообщить модератору
 Re: sp_xml_preparedocument и numeric в экпоненциальной форме  [new]
DeColo®es
Member

Откуда: Москва
Сообщений: 5499
Блог
Nicola_r
Вот! то что нужно, этот вариант идеальный для меня!
Преклоняюсь перед вашими познаниями в этой области!!!
Ну не все так шоколадно.
float - неточный тип данных и если после получения из xml (при получении идет поразрядное округление и "неточность" нивелируется) не привести к numeric, то при последующей обработке будут очень забавные "математические" эффекты типа 1=0.9999789
14 окт 09, 17:04    [7786414]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить