SQL Server中的xml.value()方法(在XML查询中获取值)

时间:2011-12-06 00:38:56

标签: sql-server sql-server-2008 xquery

我有一个像这样的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 个答案:

答案 0 :(得分:2)

我测试了以下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