Метод xml.value () в SQL Server (получение значения внутри запроса XML) - PullRequest
1 голос
/ 06 декабря 2011

У меня есть XML-запрос, подобный этому:

<ChangeSet xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

   <Change DateTime="2011-12-02T09:01:58.3615661-08:00" UserId="3123">
      <Table ChangeType="Insert" Name="EVNT_LN_AFF">
         <Keys>
            <Key FieldName="DIR_CD" Value="NB" />
            <Key FieldName="LN_ID" Value="A" />
            <Key FieldName="EVNT_ID" Value="10T000289" />
         </Keys>
         <ChangedFields>
            <Field FieldName="DIR_CD" Previous="" Current="NB" />
            <Field FieldName="LN_ID" Previous="" Current="A" />
            <Field FieldName="EVNT_ID" Previous="" Current="10T000289" />
            <Field FieldName="UD_DTTM" Previous="" Current="12/2/2011 9:01:59 AM" />
            <Field FieldName="UD_USER_ID" Previous="" Current="3123" />
         </ChangedFields>
      </Table>

(запрос продолжается)

Теперь я хочу использовать следующее утверждение:

SELECT TOP 1000 [CHG_LOG_ID]
   , [EVNT_ID]
   , [DATA_XML_TXT]
   , [UD_DTTM]
FROM [MY_PROJ].[dbo].[EVNT_CHG_LOG]
WHERE DATA_XML_TXT.value('(/ChangeSet/Change/Table/ChangedFields/UD_USER_ID)[0]','varchar(50)') like '%3123%'

Но когда я выполняю запрос, я не получаю никаких результатов.

1 Ответ

2 голосов
/ 06 декабря 2011

Я протестировал следующий XQuery, и он должен дать вам то, что вам нужно:

SELECT TOP 1000 [CHG_LOG_ID]
   , [EVNT_ID]
   , [DATA_XML_TXT]
   , [UD_DTTM]
FROM [MY_PROJ].[dbo].[EVNT_CHG_LOG]
WHERE DATA_XML_TXT.value('(/ChangeSet/Change/Table/ChangedFields/Field[@FieldName="UD_USER_ID"]/@Current)[1]','varchar(50)') like '%3123%'

Примечание: Индексирование для XQuery начинается с 1 вместо 0

...