网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

在查询中构造序列

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

--
--10.7.1节示例
--

--在查询中构造序列
SELECT Instructions.query('
     <step1> Step 1 </step1>,
     <step2> Step 2 </step2>
') AS Result --构造序列
FROM Production.ProductModel
WHERE ProductModelID=7

--有效的序列
DECLARE @x XML
SET @x = ''
SELECT @x.query('1')
SELECT @x.query('"abc", "xyz"')
SELECT @x.query('data(1)')
SELECT @x.query('<x> {1+2} </x>')

-- Root和a就是QName
DECLARE @x XML
SET @x = '<Root><a>ss</a></Root>'
SELECT @x.query('/Root/a') --使用QName

--XQuery查询
SELECT Instructions.query('
   declare namespace AWMI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/
ProductModelManuInstructions";
for $Step in /AWMI:root/AWMI:Location[1]/AWMI:step
      return
           string($Step)
') AS Result –Xquery查询的结果
FROM Production.ProductModel
WHERE ProductModelID=7

--表达式上下文边界空格过滤
declare @x xml
set @x=''
select @x.query('<a>  {"aa"}  </a>,
    <b> {"bb"   }    </b>') --空格将会被过滤

--原子化
declare @x XML
set @x='<ROOT>
<Location LID="1" SetupTime="1.1" LaborHours="3.3" />
<Location LID="2" SetupTime="1.0" LaborHours="5" />
<Location LID="3" SetupTime="2.1" LaborHours="4" />
</ROOT>'
SELECT @x.query('sum(/ROOT/Location/@LaborHours)') --获得指定对象的总计
--相当于:
SELECT @x.query('sum(data(ROOT/Location/@LaborHours))')

--使用+运算符的原子化
SELECT Instructions.query('
    declare namespace AWMI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works
/ProductModelManuInstructions";
for $WC in /AWMI:root/AWMI:Location[1]
        return
            <WC OriginalLaborHours = "{ $WC/@LaborHours }"
                UpdatedLaborHoursV1 = "{ $WC/@LaborHours + 1 }"
                UpdatedLaborHoursV2 = "{ data($WC/@LaborHours) + 1 }" >
            </WC>') as Result --在XML查询中使用+进行原子化
FROM Production.ProductModel
where ProductModelID=7

--布尔值
DECLARE @x XML
SET @x = '<b/>'
SELECT @x.query('if (/a[1]) then "true" else "false"')--返回false
SELECT @x.query('if (/b[1]) then "true" else "false"')--返回true

--data和string的使用
DECLARE @x XML
SET @x='<root>5</root>'
SELECT @x.query('data(/root[1]) + 3')--返回结果8
--以下查询失败,因为字符串类型和数值类型不能用+
SELECT @x.query('string(/root[1]) + 3')

--动态错误映射到空序列
DECLARE @x XML
SET @x=N'<root XMLns:myNS="test">
 <a>100</a>
 <b>200</b>
 <c>Hello</c>
</root>'
SELECT @x.query('avg(//*)') --有误

--在XQuery中使用注释
declare @x XML
set @x=''
SELECT @x.query('
(: 这里是注释:)
<ProductModel ProductModelID="10" />
')

--
--10.7.2节示例
--

--在XQuery中使用for语句
declare @x XML
set @x='<ManuInstructions ProductModelID="1" ProductModelName="SomeBike" >
<Location LocationID="L1" >
  <Step>1.1</Step>
  <Step>1.2</Step>
  <Step>1.3</Step>
</Location>
<Location LocationID="L2" >
  <Step>2.1</Step>
  <Step>2.2</Step>
  <Step>2.3</Step>
</Location>
</ManuInstructions>'  --初始化数据
SELECT @x.query('
   for $step in /ManuInstructions/Location[1]/Step
   return string($step)
') --循环实现

--在XQuery中使用let语句
SELECT Instructions.query('
   declare namespace AWMI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/
ProductModelManuInstructions";
        for $T in //AWMI:tool
            let $L := //AWMI:Location[.//AWMI:tool[.=data($T)]]
        return
          <tool desc="{data($T)}" Locations="{data($L/@LocationID)}"/>
') as Result --使用let语句做循环
FROM Production.ProductModel
where ProductModelID=7

--在XQuery中使用where语句
SELECT Instructions.query('
   declare namespace AWMI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/
ProductModelManuInstructions";
for $WC in /AWMI:root/AWMI:Location
      where count($WC/AWMI:step) < 3
      return
          <Location >
           { $WC/@LocationID }
          </Location>
') as Result
FROM Production.ProductModel
where ProductModelID=7

--在XQuery中使用order by语句
declare @x XML
set @x='<root>
  <Person Name="A" />
  <Person />
  <Person Name="B" />
</root>
'
select @x.query('
  for $person in //Person
  order by $person/@Name
  return   $person
')
--
--10.7.3节示例
--

--使用XQuery条件表达式
declare @x XML
declare @v varchar(20)
set @v='FirstName'
set @x='
<ROOT rootID="2">
  <FirstName>fname</FirstName>
  <LastName>lname</LastName>
</ROOT>'
--以下使用XQuery进行查询
SELECT @x.query('
if ( sql:variable("@v")="FirstName" ) then
  //FirstName
 else
   //LastName
')

--
--10.7.4节示例
--

--使用XQuery运算符
SELECT CatalogDescription.query('      
              declare namespace PD="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";      
              for $P in /PD:ProductDescription/PD:Picture[PD:Size eq "small"]      
              return      
                    $P      
             ') as Result  --XQuery运算符的使用
FROM Production.ProductModel      
WHERE ProductModelID=19      

--
--10.7.4节示例
--

--使用XQuery函数
DECLARE @books XML
SET @books='
<books>
  <book>
 <name>大学物理</name>
 <price>20</price>
  </book>
  <book>
 <name>高等数学</name>
 <price>30</price>
  </book>
</books>
'
SELECT @books.query('min(//book/price/text())')  --使用函数

  • 下一篇资讯: 创建XML主索引
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师