2015-07-19 6 views
1

У меня есть столбец XML Demographics с, например, данные, как -метод XQUERY запроса() не работает в SQL Server

<StoreSurvey xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/StoreSurvey"> 
    <AnnualSales>800000</AnnualSales> 
    <AnnualRevenue>80000</AnnualRevenue> 
    <BankName>United Security</BankName> 
    <BusinessType>BM</BusinessType> 
    <YearOpened>1996</YearOpened> 
    <Specialty>Mountain</Specialty> 
    <SquareFeet>21000</SquareFeet> 
    <Brands>2</Brands> 
    <Internet>ISDN</Internet> 
    <NumberEmployees>13</NumberEmployees> 
</StoreSurvey> 

Я хочу, чтобы получить выход в <AnnualSales>800000</AnnualSales>

и я использую этот запрос:

select Demographics.query('/StoreSurvey/AnnualSales') 
    from Sales.Store 

, но я получаю ошибку -

Msg 2260, уровень 16, состояние 1, строка 1
XQuery [Sales.Store.Demographics.query()]: Там нет элемента с именем 'StoreSurvey'

я могу ясно видеть, что есть StoreSurvey элемент. Пожалуйста, дайте мне знать, где я буду ошибся.

+2

Сообщение об ошибке правильно. Нет элемента 'StoreSurvey'. Прочтите следующее: [MSDN: обработка пространств имен в XQuery] (https://msdn.microsoft.com/en-us/library/ms187013.aspx) – Tomalak

+0

См. Http://stackoverflow.com/questions/5107790/syntax-for- xquery-with-namespace-in-the-node и http://stackoverflow.com/questions/25064078/how-to-get-specific-xml-namespace-in-xquery-in-sql-server – Tomalak

ответ

1

Необходимо, чтобы уважать пространства имен XML в игре!

<StoreSurvey xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/StoreSurvey"> 
      ********************************************************************************* 

Попробуйте этот код:

;WITH XMLNAMESPACES(DEFAULT 'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/StoreSurvey') 
select 
    Demographics.value('(/StoreSurvey/AnnualSales)[1]', 'bigint') 
from 
    Sales.Store 
+0

Когда я пытаюсь метод с другой таблицей того же типа I получает ошибку - Msg 9314, уровень 16, состояние 1, строка 2 XQuery [Production.ProductModel.Instructions.value()]: не может неявно распылять или применять «fn: data()» к сложному элементы содержимого, найденный тип '{http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions}:Location' внутри элемента inferred type '({http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions}: Location, # anonymous)? '. – sam

+0

мой запрос был с xmlnamespaces (по умолчанию 'http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions') выберите Instructions.value ('(/ root/Location) [1]', 'bigint') от Production.ProductModel где инструкции не являются нулевыми – sam

+0

@sam: извините, но без ** просмотра ** вашего XML-кода и кода, который вы используете, я не могу вам помочь здесь - есть так много вещей, которые могут быть сделано неправильно .... с вашим ** показанным XML **, мой код будет работать - гарантирован. –