Ваш запрос допускает несколько PricValue
узлов и выбирает первый, который имеет валюту USD. Если вы знаете, что у вас есть только один PricValue
узел или если вы хотите выбрать первые PricValue
узлы (независимо от валюты), вы можете использовать что-то вроде этого:
SELECT XMLData.value('(/AmtPrice/PricValue)[1]', 'NUMERIC(10,2)') As PriceValue,
XMLData.value('(/AmtPrice/PricValue/@Currency)[1]', 'CHAR(3)') As Currency
FROM Announcement
Я использовал определенные типы данных вместо nvarchar(max)
для повышения производительности. Если цена не числовая или больше, чем соответствует NUMERIC(10),2
, вы получите ошибку. Если в нем больше десятичных знаков, они будут округлены. Если валюта длиннее 3 символов, она будет молча усечена.