将Variable与每个子元素文本进行比较

时间:2014-03-19 13:20:36

标签: sql-server xml

我正在尝试循环浏览用户名列表并根据传入的用户ID授予权限。我将提供代码并在最后询问我的问题,我认为这样会更容易。

    MY XML
    <QueueSelector>
    <DB></DB>
    <FillQuery></FillQuery>
    <TabText></TabText>
    <TooltipText></TooltipText>
    <Subscribers>
      <WorkSpace>
        <Name></Name>
        <Name></Name>
        <Name></Name>
        <Name></Name>
        <Name></Name>
        <Name></Name>
        <Name></Name>
        <Name></Name>
        <Name></Name>
        <Name></Name>
        <Name></Name>
  </QueueSelector>

每个名称元素显然都包含一个用户名。我的目标是传入一个变量并根据每个名称的文本进行测试。目前我正在做..

   CAST(info.query('/Root/QueueSelector/Subscribers/WorkSpace/Name/text()') AS VARCHAR(MAX)) LIKE '%' + @UserID + '%'

返回一个长字符串。问题是如果一个人有casmith可以访问,那么拥有用户名asmith的人就可以访问。

我想我的问题是什么是解决这个问题的最佳方法。我很熟悉

    info.query('/Root/QueueSelector/Subscribers/WorkSpace/Name[1]/text())

但是我不知道哪个元素会包含人员用户名,如果它存在的话。

我知道我可疑地问了这个问题,我能澄清的任何事情让我知道。

1 个答案:

答案 0 :(得分:1)

您可以使用exist() Method (xml Data Type)sql:variable() Function (XQuery)

info.exist('/Root/QueueSelector/Subscribers/WorkSpace/Name[. = sql:variable("@UserID")]') = 1