Sql server SQL Server xml查询可以';t返回预期结果

Sql server SQL Server xml查询可以';t返回预期结果,sql-server,xml,Sql Server,Xml,我的表中有这些xml数据,如您所见: <ArrayOfFlowDetailParameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <FlowDetailParameters> <DepartmentId>23</DepartmentId> <UserId xs

我的表中有这些xml数据,如您所见:

<ArrayOfFlowDetailParameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <FlowDetailParameters>
    <DepartmentId>23</DepartmentId>
    <UserId xsi:nil="true" />
    <Username />
    <FullName />
    <ConfirmDateTime xsi:nil="true" />
    <Comment />
    <Status>Pending</Status>
    <AttachmentId />
  </FlowDetailParameters>
  <FlowDetailParameters>
    <DepartmentId>22</DepartmentId>
    <UserId xsi:nil="true" />
    <Username />
    <FullName />
    <ConfirmDateTime xsi:nil="true" />
    <Comment />
    <Status>Pending</Status>
    <AttachmentId />
  </FlowDetailParameters>
  <FlowDetailParameters>
    <DepartmentId>7</DepartmentId>
    <UserId xsi:nil="true" />
    <Username />
    <FullName />
    <ConfirmDateTime xsi:nil="true" />
    <Comment />
    <Status>Pending</Status>
    <AttachmentId />
  </FlowDetailParameters>
  <FlowDetailParameters>
    <DepartmentId>18</DepartmentId>
    <UserId xsi:nil="true" />
    <Username />
    <FullName />
    <ConfirmDateTime xsi:nil="true" />
    <Comment />
    <Status>Pending</Status>
    <AttachmentId />
  </FlowDetailParameters>
</ArrayOfFlowDetailParameters>

听起来像是在试图查询一个请求列表,其中FlowDetailParameter列的XML包含一个DepartmentId与@DepartmentId变量匹配的记录,对吗

查询中的[1]指定只检查每行的FlowDetailParameter XML中第一次出现的DepartmentId。除非XML中的第一个DepartmentId与您的参数匹配,否则将无法获得匹配

相反,您可以使用以下查询来查找所有具有FlowDetailParameter且与@departmentid变量匹配的请求


听起来像是在试图查询一个请求列表,其中FlowDetailParameter列的XML包含一个DepartmentId与@DepartmentId变量匹配的记录,对吗

查询中的[1]指定只检查每行的FlowDetailParameter XML中第一次出现的DepartmentId。除非XML中的第一个DepartmentId与您的参数匹配,否则将无法获得匹配

相反,您可以使用以下查询来查找所有具有FlowDetailParameter且与@departmentid变量匹配的请求


是的,这是答案,我同意@MaxThank you max it works。你能看看这个吗:是的,这是答案,我同意@MaxThank you max it works。你能看看这个吗:
 declare @departmentId nvarchar(max)
 set @departmentId=22
 select  Requests.*   from Requests
 where    
 and (FlowDetailParameter.value('(/ArrayOfFlowDetailParameters/FlowDetailParameters/DepartmentId/text())[1]','bigint') = @departmentId  )
SELECT r.*
FROM @Requests r
WHERE EXISTS (SELECT *
        FROM r.FlowDetailParameter.nodes('/ArrayOfFlowDetailParameters/FlowDetailParameters/DepartmentId') as Parms(DepartmentId)
        WHERE DepartmentId.value('.', 'bigint') = @departmentid)