2015-06-04 5 views
1

Это кажется очень простым, но я не смог найти пример, который работает для меня, поэтому я буду благодарен за любые советы.SQL Server 2012 - Как извлечь значение из строки XML?

У меня есть функция сервера SQL, который определяет различные сроки на основе нашего финансового года и сегодняшнего дня, и возвращает одну строку, которая выглядит как ... <row LastDayPrevMonth="2015-04-30T00:00:00" LastDayPrevMonthLY="2014-04-30T00:00:00" ... />

В хранимая процедура, которая вызывает эту функцию, я ve done ...

DECLARE @X XML 
SET @X = dbo.GetFiscalYearDates() 

... но тогда я не могу извлечь значение LastDayPrevMonth.

Я попытался десятки вариаций этого: SELECT ROW.ITEM.VALUE('LastDayPrevMonth', 'VARCHAR(30)')[1] AS Foo FROM @x.nodes('row/item') ... иногда с «AS Bar» в конце ...

Этот конкретный синтаксис дает ошибку «неверный синтаксис около keywork«, как », но любые трюки, которые я делаю, не помогают.

Спасибо за помощь, парни!

ответ

1
declare @doc xml 

select @doc= ' 
<root> 
<row LastDayPrevMonth="2015-04-30T00:00:00" LastDayPrevMonthLY="2014-04-30T00:00:00" /> 
</root> 
' 

SELECT 
     LastDayPrevMonth = Y.i.value('(@LastDayPrevMonth)[1]', 'datetime') 
    , LastDayPrevMonthLY = Y.i.value('@LastDayPrevMonthLY[1]', 'datetime') 

FROM 
    @doc.nodes('root/row') AS Y(i) 
+0

спасибо. –

+1

Я ценю это granadaCoder; Я не могу проголосовать за вас, потому что у меня нет 15 очков. Для будущих читателей функция, которая возвращает XML, должна иметь предложение в конце: ... FOR XML RAW, ROOT ('root'), чтобы получить там корневой узел. –

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