SQL Server XML應用(一)
XML在T-SQL中已定位為原生型別
就像int一樣,是由html沿伸出來的標準語言
在T-SQL中可以利用XSD 來制定XML裡元素的格式
避免資料誤值
XML的應用當廣泛,T-SQL支援將查詢結果
以XML的方式轉換輸出,使資料間傳輸更為容易
再來與XML有關的取值
以上二個取值比較制式,取出來客製化程度也較低
接著是客製化程度比較高取值:
EXPLICIT(課堂上未提)
PATH
下面是用PATH的方式來呈現SELECT的結果
SELECT的結果後面用單引號包住
可以針對不同的資料給予不同的路徑
使閱讀起來更為容易
同時也可以針對某個欄位想讓它用屬性的方式展現
只要在最前面加上@即可
PS.PATH的預設狀態即有ELEMENTS
就像int一樣,是由html沿伸出來的標準語言
在T-SQL中可以利用XSD 來制定XML裡元素的格式
避免資料誤值
XML的應用當廣泛,T-SQL支援將查詢結果
以XML的方式轉換輸出,使資料間傳輸更為容易
USE 練練 GO --建立 XML SCHEMA COLLECTION 設定要放入XML裡的格式------------------------------ CREATE XML SCHEMA COLLECTION 員工履歷XML格式 AS '<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element name="員工履歷"> <xs:complexType> <xs:sequence> <xs:element name="員工編號" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="姓名" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="性別" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="薪資" type="xs:decimal" minOccurs="1" maxOccurs="1"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>' GO ----------------------------------------------------------------------------- --練習用建出來的table,資料的欄位是XML格式並且遵守上面XSD---------------------------- CREATE TABLE XML資料 ( 編號 INT, 資料 XML(dbo.員工履歷XML格式) ) ----------------------------------------------------------------------------- --只接受 Well-Form 的 XML --標準格式編製才可INSERT進去 --有分大小寫,有首尾結點,單結點要有結束標計等等 INSERT INTO XML資料 VALUES(1,'<員工履歷><員工編號>1</員工編號><姓名>王小明</姓名><性別>男</性別><薪資>36000</薪資></員工履歷>') --以下2筆放不進去,因為與格式不符-------------------------------------------------- INSERT INTO XML資料 VALUES(2,'<員工><員工編號>2</員工編號><姓名>李小英</姓名><薪資>35000</薪資></員工>') INSERT INTO XML資料 VALUES(3,'<員工><編號>3</編號><姓名>林大雄</姓名><興趣>游泳、睡覺</興趣></員工>') SELECT * FROM XML資料
再來與XML有關的取值
- RAW:就是列取值,取出來的資料預設是屬性
ROOT可加可不加,正常都會加
如果想要用元素的方式表示,最後要加上ELEMENTS - AUTO:自動化,大至語法同上
以上二個取值比較制式,取出來客製化程度也較低
SELECT 產品編號,品名, CAST(價錢 AS MONEY) AS 價錢 FROM 巨巨 FOR XML RAW('產品'), ROOT('產名資料'),ELEMENTS SELECT 產品編號,品名, CAST(價錢 AS MONEY) AS 價錢 FROM 巨巨 FOR XML AUTO, ROOT('產名資料'),ELEMENTS
接著是客製化程度比較高取值:
PATH
下面是用PATH的方式來呈現SELECT的結果
SELECT的結果後面用單引號包住
可以針對不同的資料給予不同的路徑
使閱讀起來更為容易
同時也可以針對某個欄位想讓它用屬性的方式展現
只要在最前面加上@即可
PS.PATH的預設狀態即有ELEMENTS
SELECT 產品編號 '@編號' --編號會是屬性 ,品名 '產品名' --以產品名為子元素 ,CAST(價錢 AS MONEY) '價錢' --以價錢為子元素 FROM 巨巨 FOR XML PATH('產品'),ROOT('產名資料') ----------------------------------------------------------------------------- USE 中文北風 GO SELECT 員工編號 '@編號' --屬性 ,姓名 '個資/姓名' --會在「個資」下的姓名 ,稱呼 '個資/性別' --會在「個資」下的性別 ,CAST(雇用日期 AS DATE) '職務/到職日' --會在「職務」下的到職日 ,職稱 '職務/職位' --會在「職務」下的職位 ,薪資 '職務/薪資' --會在「職務」下的薪資 FROM 員工 FOR XML PATH('員工資料'),ROOT('員工資料表清單') ----------------------------------------------------------------------------- --PATH槽狀XML查詢,子查詢的結果會在主查詢中成為一個元素,以列表方式展開----------------- SELECT 客戶編號,公司名稱,連絡人,連絡人職稱,地址, ( SELECT 客戶編號,訂單號碼,訂單日期,運費 FROM 訂貨主檔 WHERE 客戶編號 = 客戶.客戶編號 FOR XML RAW('訂單'),TYPE ) AS 相關訂單 FROM 客戶 FOR XML PATH('客戶資料'),ROOT('客戶訂單一覽') ----------------------------------------------------------------------------- --AUTO的好處,加上ORDER BY 就會像上面的結果,不同的是全都以屬性展現-------------------- SELECT 客戶.客戶編號,訂單號碼,訂單日期,運費,公司名稱,連絡人,連絡人職稱,地址 FROM 訂貨主檔 JOIN 客戶 ON 訂貨主檔.客戶編號 = 客戶.客戶編號 ORDER BY 客戶.客戶編號 FOR XML AUTO,ROOT('客戶訂單一覽')
留言
張貼留言