2009-08-10 2 views
1

Я работаю над хранимой процедурой для приложения календаря. Каждое событие в календаре может иметь несколько дат. Эта информация хранится в двух разных таблицах. Вместо того, чтобы писать две хранимые процедуры и вызывать второй раз несколько раз, чтобы сохранить даты, я бы скорее просто передал их с использованием XML. Проблема в том, что я хочу преобразовать некоторые из значений в типы даты и один из них в тип ntext.Преобразование значений, хранящихся в XML, в типы ntext и date в SQL Server 2005

Вот простой пример того, что я до сих пор:

declare @samplexml as xml 
set @samplexml = '<root><scheduleRow><dateBegin>4/5/2009</dateBegin><dateEnd>4/6/2009</dateEnd><timeBegin>1:00 pm</timeBegin><timeEnd>2:00 pm</timeEnd><location>Sheas House</location></scheduleRow><scheduleRow><dateBegin>5/5/2009</dateBegin><dateEnd>5/6/2009</dateEnd><timeBegin>2:00 pm</timeBegin><timeEnd>3:00 pm</timeEnd><location>Metro Buffet</location></scheduleRow></root>' 

select x.scheduleRow.value('./dateBegin[1]','varchar(20)') as date_begin, 
     x.scheduleRow.value('./dateEnd[1]','varchar(20)') as date_end, 
     x.scheduleRow.value('./timeBegin[1]','varchar(20)') as time_begin, 
     x.scheduleRow.value('./timeEnd[1]','varchar(20)') as time_end, 
     x.scheduleRow.value('./location[1]','ntext')  as location 
    from @samplexml.nodes('/root/scheduleRow') as x(scheduleRow) 

Если вы попытаетесь запустить это, вы получите эту ошибку:

Msg 9500, уровень 16, состояние 1, строка 4 Недопустимый тип данных 'ntext', используемый в методе VALUE.

Что я здесь делаю неправильно? Есть ли способ сделать то, что я хочу?

ответ

3

Не используйте TEXT, NTEXT и IMAGE для любой новой разработки. Это deprecated и будут удалены в будущей версии SQL. Даже после SQL 2k5 они больше не поддерживались ни при каких новых функциях, в случае с XML-методами.

Вместо этого используйте VARCHAR (MAX), NVARCHAR (MAX) и VARBINARY (MAX).

Смежные вопросы