WEB开发网
开发学院数据库MSSQL Server 使用MicrosoftSQLServer2000的XML查询 阅读

使用MicrosoftSQLServer2000的XML查询

 2007-11-11 08:39:30 来源:WEB开发网   
核心提示:由于xml(标准化越来越近了)本身的诸多优点,xml(标准化越来越近了)技术已被广泛的使用,使用MicrosoftSQLServer2000的XML查询,目前的好多软件技术同xml(标准化越来越近了)紧密相关,比如微软的,CategoryName AS NanmeFROM CategoriesWHERE Categor

  由于xml(标准化越来越近了)本身的诸多优点,xml(标准化越来越近了)技术已被广泛的使用,目前的好多软件技术同xml(标准化越来越近了)紧密相关,比如微软的。net 平台对xml(标准化越来越近了)提供了强大的支持,提供System.xml(标准化越来越近了)以及其子命名空间下的类型来操作xml(标准化越来越近了).Ado.net通过核心类型DataSet出色的把关系型数据库同xml(标准化越来越近了)进行了紧密集成。由于平常许多开发人员使用。net 来操作sql server(WINDOWS平台上强大的数据库平台)的到数据集后再转换成xml(标准化越来越近了),所以往往忽略Transact-SQL查询生成xml(标准化越来越近了)数据的强大功能。对于一些项目使用xml(标准化越来越近了)查询直接通过SQL生成xml(标准化越来越近了)会来的更为简便,所以我通过在实际项目中的使用和查阅一些资料写成一个知识点,一是温故而知新,二是对于一些开发者刚好需要这方面的技术而还没有找到比较快捷的学习方式提供一条途径。
  
  在sql server(WINDOWS平台上强大的数据库平台) 2000中查询生成xml(标准化越来越近了)的语法表达式比较简洁,整个语法如下:
  
  SELECT <;select_list>
  
  FROM <;table_source>
  
  WHERE <;search_condition>
  
  FOR xml(标准化越来越近了) AUTO | RAW | EXPLICIT [,xml(标准化越来越近了)DATA ] [,ELEMENTS] [,BINARY BASE64]
  
  下面我将以Northwind数据库来演示上面的表达式中所包含的各项功能,下面的查询语句和返回结果都通过sql server(WINDOWS平台上强大的数据库平台) 2000查询分析器来执行和得到。
  
  一。 使用AUTO模式
  
  该模式我认为在生成单表xml(标准化越来越近了)数据方面是用得最多的,能满足一般的需要。先来看他的简单查询。
  
  1.简单查询
  
  查询语句:
  
  SELECT CategoryID,
  
  CategoryName
  
  FROM Categories
  
  WHERE CategoryID <; 3 FOR xml(标准化越来越近了) AUTO
  
  返回结果:
  
  <;Categories CategoryID="1" CategoryName="Beverages"/>
  
  <;Categories CategoryID="2" CategoryName="Condiments"/>
  
  也可以使用别名,
  
  查询语句:
  
  SELECT CategoryID AS ID,
  
  CategoryName,
  
  GetDate() as CurrDate
  
  FROM Categories MyTable
  
  WHERE CategoryID <; 3 FOR xml(标准化越来越近了) AUTO
  
  返回结果:
  
  <;MyTable ID="1" CategoryName="Beverages" CurrDate="2005-06-24T11:09:52.937"/>
  
  <;MyTable ID="2" CategoryName="Condiments" CurrDate="2005-06-24T11:09:52.937"/>
  
  2.连接查询
  
  以两个表为例,
  
  查询语句:
  
  SELECT Categories.CategoryID,
  
  Categories.CategoryName,
  
  ProductID,
  
  ProductName
  
  FROM Categories
  
  JOIN Products ON Categories.CategoryID = Products.CategoryID AND ProductID <;5
  
  WHERE Categories.CategoryID <; 3 FOR xml(标准化越来越近了) AUTO
  
  返回结果:
  
  <;Categories CategoryID="1" CategoryName="Beverages">
  
  <;Products ProductID="1" ProductName="Chai"/>
  
  <;/Categories>
  
  <;Categories CategoryID="2" CategoryName="Condiments">
  
  <;Products ProductID="2" ProductName="Chang"/>
  
  <;/Categories>
  
  可以看到表连接查询可以生成分层次的xml(标准化越来越近了),不过需要注意的是SELECT子句中的父表的列要排在子表的列的前面,否则会出现你不想看到的结果,如:
  
  查询语句:
  
  SELECT ProductID,Categories.CategoryID,Categories.CategoryName,ProductName
  
  FROM Categories
  
  JOIN Products ON Categories.CategoryID = Products.CategoryID and ProductID <;5
  
  WHERE Categories.CategoryID <;3 FOR xml(标准化越来越近了) AUTO
  
  返回结果:
  
  <;Products ProductID="1" ProductName="Chai">
  
  <;Categories CategoryID="1" CategoryName="Beverages"/>
  
  <;/Products>
  
  <;Products ProductID="2" ProductName="Chang">
  
  <;Categories CategoryID="1" CategoryName="Beverages"/>
  
  <;/Products>
  
  <;Products ProductID="3" ProductName="Aniseed Syrup">
  
  <;Categories CategoryID="2" CategoryName="Condiments"/>
  
  <;/Products>
  
  <;Products ProductID="4" ProductName="Chef Anton&apos;s Cajun Seasoning">
  
  <;Categories CategoryID="2" CategoryName="Condiments"/>
  
  <;/Products>
  
  3.使用ELEMENTS选项
  
  使用该选项可以生成以元素为中心的xml(标准化越来越近了)表示,默认为属性方式,不过属性方式节省空间。需要注意的是使用ELEMENTS选项是一种全是或全否的形式,不能得到一部分是以元素表示而另一部分以属性表示的xml(标准化越来越近了)数据。
  
  查询语句:
  
  SELECT CategoryID,
  
  CategoryName
  
  FROM Categories
  
  WHERE CategoryID <; 3
  
  FOR xml(标准化越来越近了) AUTO, ELEMENTS
  
  返回结果:
  
  <;Categories>
  
  <;CategoryID>1<;/CategoryID>
  
  <;CategoryName>Beverages<;/CategoryName>
  
  <;/Categories>
  
  <;Categories>
  
  <;CategoryID>2<;/CategoryID>
  
  <;CategoryName>Condiments<;/CategoryName>
  
  <;/Categories>
  
  在连接查询时,
  
  查询语句:
  
  SELECT Categories.CategoryID,
  
  ProductID,
  
  ProductName
  
  FROM Categories
  
  JOIN Products ON Categories.CategoryID = Products.CategoryID and ProductID <;4
  
  WHERE Categories.CategoryID <;3 FOR xml(标准化越来越近了) AUTO, ELEMENTS
  
  返回结果:
  
  <;Categories>
  
  <;CategoryID>1<;/CategoryID>
  
  <;Products>
  
  <;ProductID>1<;/ProductID>
  
  <;ProductName>Chai<;/ProductName>
  
  <;/Products>
  
  <;Products>
  
  <;ProductID>2<;/ProductID>
  
  <;ProductName>Chang<;/ProductName>
  
  <;/Products>
  
  <;/Categories>
  
  <;Categories>
  
  <;CategoryID>2<;/CategoryID>
  
  <;Products>
  
  <;ProductID>3<;/ProductID>
  
  <;ProductName>Aniseed Syrup<;/ProductName>
  
  <;/Products>
  
  <;/Categories>
  
  4.检索对二进制数据的XPath引用
  
  这是对二进制数据的操作,
  
  查询语句:
  
  SELECT CategoryID,
  
  Picture
  
  FROM Categories
  
  WHERE CategoryID = 1
  
  FOR xml(标准化越来越近了) AUTO
  
  返回结果:
  
  <;Categories CategoryID="1" Picture="dbobject/Categories[@CategoryID='1']/@Picture"/>
  
  使用ELEMENTS方式,
  
  查询语句:
  
  SELECT CategoryID,
  
  Picture
  
  FROM Categories
  
  WHERE CategoryID = 1
  
  FOR xml(标准化越来越近了) AUTO,ELEMENTS
  
  返回结果:
  
  <;Categories>
  
  <;CategoryID>1<;/CategoryID>
  
  <;Picture>dbobject/Categories[@CategoryID='1']/@Picture<;/Picture>
  
  <;/Categories>
  
  二。使用RAW模式
  
  使用RAW模式不能使用ELEMENTS选项。
  
  1.简单查询
  
  查询语句:
  
  SELECT CategoryID,
  
  CategoryName AS Nanme
  
  FROM Categories
  
  WHERE CategoryID <; 3
  
  ORDER BY CategoryID DESC
  
  FOR xml(标准化越来越近了) RAW
  
  返回结果:
  
  <;row CategoryID="2" Nanme="Condiments"/>
  
  <;row CategoryID="1" Nanme="Beverages"/>
  
  2.连接查询
  
  查询语句:
  
  SELECT Categories.CategoryID,
  
  Categories.CategoryName,
  
  ProductID,
  
  ProductName
  
  FROM Categories
  
  JOIN Products ON Categories.CategoryID = Products.CategoryID and ProductID <;4
  
  WHERE Categories.CategoryID <;= 2 FOR xml(标准化越来越近了) RAW
  
  返回结果:
  
  <;row CategoryID="1" CategoryName="Beverages" ProductID="1" ProductName="Chai"/>
  
  <;row CategoryID="1" CategoryName="Beverages" ProductID="2" ProductName="Chang"/>
  
  <;row CategoryID="2" CategoryName="Condiments" ProductID="3" ProductName="Aniseed Syrup"/>

Tags:使用 MicrosoftSQLServer XML

编辑录入:coldstar [复制链接] [打 印]
赞助商链接