WEB开发网      婵犵數濮烽弫鍛婄箾閳ь剚绻涙担鍐叉搐绾剧懓鈹戦悩瀹犲闁汇倗鍋撻妵鍕箛閸洘顎嶉梺绋款儑閸犳劙濡甸崟顖氬唨闁靛ě浣插亾閹烘鈷掗柛鏇ㄥ亜椤忣參鏌″畝瀣暠閾伙絽銆掑鐓庣仭缁楁垿姊绘担绛嬪殭婵﹫绠撻、姘愁樄婵犫偓娴g硶鏀介柣妯款嚋瀹搞儱螖閻樺弶鍟炵紒鍌氱Ч瀹曟粏顦寸痪鎯с偢瀵爼宕煎☉妯侯瀳缂備焦顨嗗畝鎼佸蓟閻旈鏆嬮柣妤€鐗嗗▓妤呮⒑鐠団€虫灀闁哄懐濮撮悾鐤亹閹烘繃鏅濋梺闈涚墕濡瑩顢欒箛鏃傜瘈闁汇垽娼ф禒锕傛煕閵娿儳鍩f鐐村姍楠炴﹢顢欓懖鈺嬬幢闂備浇顫夊畷妯肩矓椤旇¥浜归柟鐑樻尭娴滃綊姊虹紒妯虹仸闁挎洍鏅涜灋闁告洦鍨遍埛鎴︽煙閼测晛浠滃┑鈥炽偢閹鈽夐幒鎾寸彇缂備緡鍠栭鍛搭敇閸忕厧绶炴俊顖滅帛濞呭洭姊绘担鐟邦嚋缂佽鍊垮缁樼節閸ャ劍娅囬梺绋挎湰缁嬫捇宕㈤悽鍛婄厽閹兼番鍨婚埊鏇㈡煥濮樿埖鐓熼煫鍥ュ劤缁嬭崵绱掔紒妯肩畺缂佺粯绻堝畷姗€濡歌缁辨繈姊绘担绛嬪殐闁搞劋鍗冲畷顖炲级閹寸姵娈鹃梺缁樻⒒閳峰牓寮崒鐐寸厱闁抽敮鍋撻柡鍛懅濡叉劕螣鐞涒剝鏂€闂佺粯鍔曞Ο濠囧吹閻斿皝鏀芥い鏃囨閸斻倝鎽堕悙鐑樼厱闁哄洢鍔屾晶顖炴煕濞嗗繒绠婚柡灞界Ч瀹曨偊宕熼鈧▍锝囩磽娴f彃浜炬繝銏f硾椤戝洨绮绘ィ鍐╃厵閻庢稒岣跨粻姗€鏌ㄥ☉妯夹fい銊e劦閹瑩顢旈崟顓濈礄闂備浇顕栭崰鏍礊婵犲倻鏆﹂柟顖炲亰濡茶鈹戦埄鍐ㄧ祷妞ゎ厾鍏樺璇测槈閵忕姈鈺呮煏婢跺牆鍔撮柛鏂款槺缁辨挻鎷呯粙搴撳亾閸濄儳鐭撶憸鐗堝笒閺嬩線鏌熼崜褏甯涢柡鍛倐閺屻劑鎮ら崒娑橆伓 ---闂傚倸鍊搁崐鐑芥倿閿旈敮鍋撶粭娑樺幘濞差亜鐓涢柛娑卞幘椤斿棝姊虹捄銊ユ珢闁瑰嚖鎷�
开发学院数据库MSSQL Server 使用MicrosoftSQLServer2000的XML查询 阅读

使用MicrosoftSQLServer2000的XML查询

 2007-11-11 08:39:30 来源:WEB开发网 闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷闂傚倸鍊搁崐椋庣矆娓氣偓楠炲鏁撻悩鎻掔€梺姹囧灩閻忔艾鐣烽弻銉︾厵闁规鍠栭。濂告煕鎼达紕校闁靛洤瀚伴獮鎺楀箣濠靛啫浜鹃柣銏⑶圭壕濠氭煙閻愵剚鐏辨俊鎻掔墛缁绘盯宕卞Δ鍐冣剝绻涘畝濠佺敖缂佽鲸鎹囧畷鎺戭潩閹典焦鐎搁梻浣烘嚀閸ゆ牠骞忛敓锟�婵犵數濮烽弫鍛婃叏椤撱垹绠柛鎰靛枛瀹告繃銇勯幘瀵哥畼闁硅娲熷缁樼瑹閳ь剙岣胯鐓ら柕鍫濇偪濞差亜惟闁宠桨鑳堕崝锕€顪冮妶鍡楃瑐闁煎啿鐖奸崺濠囧即閵忥紕鍘梺鎼炲劗閺呮稒绂掕缁辨帗娼忛埡浣锋闂佽桨鐒﹂幑鍥极閹剧粯鏅搁柨鐕傛嫹闂傚倸鍊搁崐椋庢濮橆兗缂氱憸宥堢亱闂佸湱铏庨崰鏍不椤栫偞鐓ラ柣鏇炲€圭€氾拷  闂傚倸鍊搁崐鐑芥嚄閼哥數浠氱紓鍌欒兌缁垶銆冮崨鏉戠厺鐎广儱顦崡鎶芥煏韫囨洖校闁诲寒鍓熷铏圭磼濡搫顫岄梺鍦拡閸嬪棝鎯€椤忓浂妯勯梺鍝勬湰濞叉ḿ鎹㈠┑濠勭杸闁哄洨濮烽悰銉╂⒒娴e搫甯跺鐟帮攻缁傚秴饪伴崼姘e亾閺冨牆绀冩い蹇庣娴滈箖鏌ㄥ┑鍡涱€楀褜鍠栭湁闁绘ɑ鐟ョ€氼喚绮绘ィ鍐╃厱妞ゆ劑鍊曢弸搴ㄦ煟韫囧鍔滈柕鍥у瀵潙螣閸濆嫬袝婵$偑鍊戦崹娲偡閳哄懎绠栭柍鈺佸暞閸庣喖鏌曢崶褍绨婚柟鍑ゆ嫹
核心提示:由于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 [复制链接] [打 印]
赞助商链接