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

Откуда:
Сообщений: 28
Здравствуйте

Есть интересная задача - хочу преобразовать данные в xml, а потом снова вытащить их оттуда в строки, не именуя явно поля.
Всё в принципе работает, но некоторые типы данных преобразуются в xml не так, как хотелось бы - float, datetime.

Вот запрос:

declare @xml xml

select @xml = 
(
	select *
	from
	(
		select
			cast(348.0234908321 as float) as Value_Float,
			getdate() as Value_Date_Time
	) as [Data]
	for xml auto, xmlschema('MySchema')
)

select @xml as xml

;with XMLNAMESPACES (default 'MySchema')
select
	T.C.value('local-name(.)', 'nvarchar(max)') as Field_Name,
	T.C.value('data(.)', 'nvarchar(max)') as Field_Value
from @xml.nodes('/Data') as A(B)
	outer apply A.B.nodes('@*') as T(C)


Но в результате float преобразуется в 3.480234908321000e+002, а datetime - в дату с таймзоной.
Явно преобразовать поля я могу, но хотелось бы найти универсальный метод. И ведь типы аттрибутов есть в inline schema, только как их оттуда вытащить?

Может, кто-нибудь знает способ, как указать в методе value тип из inline schema? преобразование типов какое-нибудь?
16 дек 11, 12:47    [11776939]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить тип из xsd в методе value()  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
StPatrick
Есть интересная задача - хочу преобразовать данные в xml, а потом снова вытащить их оттуда в строки, не именуя явно поля.
А зачем вам? Мне кажется вам это не нужно.

Как совет. XML на SQL гиблое дело. Микроскоп, гвозди ...

Сначала надо знать список имеющихся инструментов, их особенности и направленность, а потом решать задачи используя подходящий.
А использовать первый попавшийся - лезть в бутылку.

Скажу вот что. Имея схему (XSD), данные (XML) и таблицу. Можно одной короткой командой загнать данные любого объёма наи-эффективнейшим способом не написав никакие запросы вообще. И этот инструмент поставляется вместе с SQL.
16 дек 11, 22:27    [11780749]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить тип из xsd в методе value()  [new]
StPatrick
Member

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

Спасибо за совет и за подсказку, что именно мне надо, жалко ответа не дали.

Как использовать bulk load я знаю, мне не надо затягивать данные в БД.
в данном случае хотел сделать именно то, что сказал.
16 дек 11, 22:58    [11780886]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить тип из xsd в методе value()  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
StPatrick
Как использовать bulk load я знаю
А XmlBulkLoad ли вы имели ввиду?
StPatrick
жалко ответа не дали
Жаль что вы ответа не дали на вопрос "А зачем вам?"
18 дек 11, 22:42    [11785843]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить