当前位置: 首页 > 面试题库 >

XQUERY-如何在“ value()”函数中使用sql:variable?

夹谷苗宣
2023-03-14
问题内容

下面的查询试图选择给定节点的子节点。如何使用变量而不是对子节点进行硬编码,以便可以将它们作为参数传递给SProc?

declare @T table(XMLCol xml)
insert into @T values
('<Root xmlns="http://tempuri.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Elem1 type="T1">
    <Name type="string" display="First name">John</Name>
    <TimeZone display="Time zone">
      <children>
      <DisplayName type="string" display="Display name">GMT Standard Time</DisplayName>
      <HiddenName type="string" display="Hidden name">GMT</HiddenName>
      </children>
    </TimeZone>
  </Elem1>
</Root>')

declare @Node varchar(50)
set @Node = 'TimeZone'

select N.value('(children/DisplayName)[1]', 'varchar(100)') as Value
from @T as T
  cross apply T.XMLCol.nodes('//*[local-name()=sql:variable("@Node")]') as X(N)

问题答案:
declare @T table(XMLCol xml)
insert into @T values
('<Root xmlns="http://tempuri.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Elem1 type="T1">
    <DisplayName type="string" display="Display name">No this</DisplayName>
    <Name type="string" display="First name">John</Name>
    <TimeZone display="Time zone">
      <children>
        <DisplayName type="string" display="Display name">GMT Standard Time</DisplayName>
        <HiddenName type="string" display="Hidden name">GMT</HiddenName>
      </children>
    </TimeZone>
  </Elem1>
</Root>')

declare @Node1 varchar(50)
set @Node1 = 'TimeZone'

declare @Node2 varchar(50)
set @Node2 = 'DisplayName'

select N2.Value.value('.', 'varchar(100)') as Value 
from @T as T
  cross apply (select T.XMLCol.query('//*[local-name()=sql:variable("@Node1")]')) as N1(Value) 
  cross apply (select N1.Value.query('//*[local-name()=sql:variable("@Node2")]')) as N2(Value)


 类似资料:
  • 下表列出了XQuery提供的常用日期函数。 序号 函数 描述 1 current-date() 返回当前日期。 2 current-time() 返回当前时间。 3 current-dateTime() 返回当前日期和当前时间。

  • 下表列出了XQuery提供的常用序列函数,它们如下所示 - 序号 名称 描述 1 count($seq as item()*) 计算序列中的项目数量。 2 sum($seq as item()*) 返回序列中数据项的总和。 3 avg($seq as item()*) 返回序列中数据项的平均值。 4 min($seq as item()*) 返回序列中数据项的最小值。 5 max($seq as

  • 我目前正在阅读React官方网站,在那里我遇到了这个问题。React官方网站声明我们可以在JSX中使用函数代码。因此,我尝试了以下代码,但不起作用。 ABCD类扩展了React。组件{ } 我知道,我知道,你们中的一些人可能会说,看看React网站上给出的例子。我看到了,官网上的例子涉及到外部功能。我只是想知道我们能否独立使用JSX内部的函数。 有关更多信息,请参阅此链接:https://reac

  • XQuery提供编写自定义函数的功能。 下面列出了创建自定义函数的准则。 使用关键字来定义函数。 使用当前XML架构中定义的数据类型 将函数体包含在花括号内。 使用XML命名空间前缀函数的名称。 创建自定义函数时使用以下语法。 语法 示例 以下示例显示如何在XQuery中创建用户定义的函数。 XQuery表达式 输出结果 - 验证结果 要测试上述函数,用上面的XQuery表达式替换books.xq

  • 下表列出了XQuery提供的常用字符串操作函数。 函数 描述 string-length($string as xs:string) as xs:integer 返回字符串的长度。 concat($input as xs:anyAtomicType?) as xs:string 返回连接的字符串。 string-join($sequence as xs:string*, $delimiter as

  • 问题内容: 我正在用Java执行一个项目,该项目具有在数据库中添加文件的功能,并且我想使用winapi函数来选择文件。我该怎么办? 问题答案: 到目前为止,最简单的方法是使用Java JNA,它已经具有stcalls的翻译功能。 您可以在JavaWorld上找到它的基础教程(至少有Winapi示例)。 您也可以使用JNI,但是JNI要求您使用专门构建的头文件进行接口连接,而这一切都很难维护和使用。