国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

深入探討SQL Server 2000對XML的支持(二)

2019-11-18 14:47:30
字體:
來源:轉載
供稿:網友

  使用我們剛才創建的虛擬目錄,我們就可以通過把SQL查詢語句寫入URL的方式執行查詢。打開瀏覽器,在地址欄中寫入以下URL:http://localhost/northwind?sql=SELECT+ *+FROM+Customers+WHERE+CustomerID='ANTON' +FOR+xml+AUTO&root=root,假如你使用的虛擬目錄別名不是Northwind或者你使用一個遠程服務器,只需要把相應的值改掉就可以了。

  瀏覽器中會出現:

<?xml version="1.0" encoding="utf-8" ?>
<root>
<Customers CustomerID="ANTON" CompanyName="Antonio Moreno Taquería" ContactName="Antonio Moreno" ContactTitle="Owner" Address="Mataderos 2312" City="México D.F." PostalCode="05023" Country="Mexico" Phone="(5) 555-3932" />
</root>


  讓我們來分析一下這個URL,“http://localhost/northwind”后面跟了一個SQL查詢語句,用來執行查詢數據庫Northwind的任務。在本例中,我們使用的查詢語句是“SELECT+*+FROM+Customers+WHERE+CustomerID='ANTON'”。請注重,這條語句已經被URL編碼過了,其中的空格都被替換成加號“+”,這樣它才能被瀏覽器正確的傳送到數據庫中去,關于URL編碼格式請您參閱相關文檔。

  在查詢語句之后,有添加了兩個新的要害字:FOR XML和AUTO。FOR XML要害字可以對現有的關系數據庫執行 SQL 查詢,以返回 XML 文檔形式。AUTO模式則將查詢結果作為嵌套 XML 元素返回,在 FROM 子句內,每個在 SELECT 子句中至少有一列被列出的表都表示為一個 XML 元素,SELECT 子句中列出的列映射到適當的元素特性,當指定了 ELEMENTS 選項后,表列映射到子元素而非特性。默認情況下,AUTO 模式將表列映射到 XML 特性。

  在FOR XML AUTO后,還需要添加一個參數“root”,其參數值作為返回的XML文件的root元素名。比如說,你可以把上面我給出的例子中的root的參數值設為Northwind,你會發現,返回的XML文件中除了root元素名變為Northwind了以外,其它都沒有變化。

  上面我們說的是直接使用HTTP中執行簡單的查詢,除此之外你還可以執行更加復雜的查詢,比如說連接不同的表進行查詢,請看下面的例子,在下例中,SELECT 語句連接了 Northwind 數據庫的中的 Customers 和 Orders 表,并返回信息。

http://localhost/northwind?sql=SELECT
Customer.CustomerID%2cCustomer.Contact
Name%2c%5bOrder%5d.OrderID+FROM+Customers+
Customer+INNER+JOIN+Orders+%5bOrder%
5d+ON+Customer.CustomerID%3d%5bOrder%
5d.CustomerID+FOR+XML+AUTO&root=Northwind


因為返回的XML文件太長,我就不把它列出來了。

  假如你不想在Customers表和Orders表中出現嵌套的話,SQL Server 2000還提供另一個要害字用來替代AUTO,這個要害字就是RAW。RAW 模式將查詢結果集中的每一行轉換為帶有類屬標識符 row 的 XML 元素。為了讓您能夠深入了解RAW,我再給出一個例子:使用 RAW 模式檢索客戶和訂單信息

  下面的查詢返回客戶和訂單信息。在 FOR XML 子句中指定 RAW 模式。


SELECT Customers.CustomerID, Orders.OrderID, Orders.OrderDate
FROM Customers, Orders
WHERE Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerID
FOR XML RAW


  下面是部分結果:

<row CustomerID="ALFKI" OrderID="10643" OrderDate="1997-08-25T00:00:00"/>

<row CustomerID="ANATR" OrderID="10308" OrderDate="1996-09-18T00:00:00"/>

<row CustomerID="ANATR" OrderID="10625" OrderDate="1997-08-08T00:00:00"/>

<row CustomerID="AROUT" OrderID="10355" OrderDate="1996-11-15T00:00:00"/>


  可以使用外部聯接指定上面的查詢在結果集中返回所有客戶,無論這些客戶是否有訂單。


   SELECT C.CustomerID, O.OrderID, O.OrderDate
     FROM Customers C LEFT OUTER JOIN Orders O ON C.CustomerID = O.CustomerID ORDER BY C.CustomerID FOR XML RAW


  下面是部分結果:


<row CustomerID="BONAP" OrderID="11076" OrderDate="1998-05-06T00:00:00"/>

<row CustomerID="FISSA"/>

<row CustomerID="PARIS"/>

<row CustomerID="RICSU" OrderID="11075" OrderDate="1998-05-06T00:00:00"/>



  我們還可以使用 HTTP 執行存儲過程,比如下面這個名為GetXML的存儲過程:


  CREATE PROCEDURE GetXml
   (
    @CustomerID varchar(5)
   )
   AS
    BEGIN
     SELECT CustomerID, CompanyName,ContactName
      FROM Customers
      WHERE CustomerID LIKE @CustomerID + '%'
      FOR XML AUTO
  END


  為了執行這個存儲過程并傳送相應的參數,我們可以使用下面這段URL,http://localhost/northwind?sql=exec+GetXml+'A'&root=root。這樣,我們就能夠在更高一層次使用存儲過程,并且可以根據最終用戶想要得到的結果動態的改變參數值(比如在本例中,我們用的是“A”)。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥芬河市| 双桥区| 洛扎县| 安远县| 玛沁县| 日土县| 称多县| 肃南| 塔城市| 新津县| 贺兰县| 孝义市| 当阳市| 宁南县| 岳池县| 东兰县| 加查县| 邳州市| 呼伦贝尔市| 长治市| 林西县| 苗栗市| 茶陵县| 广州市| 长岭县| 普宁市| 石楼县| 密山市| 舞阳县| 长宁县| 合山市| 东平县| 连山| 沁源县| 攀枝花市| 广饶县| 尉犁县| 安溪县| 夹江县| 大姚县| 滦南县|