SQL Server 2008中有關(guān)XML的新功能(3)_Mssql數(shù)據(jù)庫(kù)教程
推薦:在SQL Server實(shí)例之間傳輸?shù)卿浐兔艽a概要 在將數(shù)據(jù)庫(kù)移動(dòng)到新服務(wù)器后,用戶可能無(wú)法登錄到新服務(wù)器。相反,他們會(huì)收到下面的錯(cuò)誤消息: Msg 18456, Level 16, State 1 Login failed for user '%ls'. 您必須將登錄和密碼傳
2.3 SQL Server 2008中的XML功能
XML功能是在SQL Server 2000和SQL Server 2005中推出的,在SQL Server 2008中得到了增強(qiáng)。在SQL Server 2008中主要的與XML相關(guān)的改進(jìn)包括:
· 改進(jìn)了schema 驗(yàn)證能力
· 增強(qiáng)了對(duì)XQuery 的支持
· 增強(qiáng)了XML數(shù)據(jù)操縱語(yǔ)言(DML)的插入功能
本篇白皮書(shū)的其余部分描述了這些增強(qiáng)之處,并介紹了你怎樣在SQL Server 2008中使用它們來(lái)實(shí)現(xiàn)更好的XML解決方案。
3 增強(qiáng)了XML Schema驗(yàn)證功能
你可以使用一個(gè)或多個(gè)XSD schema執(zhí)行遵從性檢查,以此來(lái)驗(yàn)證XML數(shù)據(jù)。一個(gè)schema為某個(gè)特定的XML數(shù)據(jù)結(jié)構(gòu)定義被允許的XML元素和屬性,并通常用于確保XML文檔按正確的結(jié)構(gòu)包含進(jìn)了所要求的所有數(shù)據(jù)元素。
SQL Server 2005推出了通過(guò)使用XML schema 集合來(lái)進(jìn)行XML數(shù)據(jù)驗(yàn)證。一般的方法是使用CREATE XML SCHEMA COLLECTION語(yǔ)句創(chuàng)建包含了針對(duì)你的XML數(shù)據(jù)的schema 規(guī)則的schema集合,然后當(dāng)你要定義一個(gè)必須符合這個(gè)schema 集合中的schema 規(guī)則的xml字段或變量時(shí)參照這個(gè)schema集合名稱。然后SQL Server會(huì)按照這個(gè)schema集合中的schema規(guī)則來(lái)驗(yàn)證插入或更新進(jìn)這個(gè)字段或變量的所有數(shù)據(jù)。
在SQL Server 2005中的XML Schema支持實(shí)現(xiàn)了一個(gè)廣泛的純XML Schema規(guī)格的子集,并涵蓋了最常見(jiàn)的XML驗(yàn)證場(chǎng)景。SQL Server 2008擴(kuò)展了這個(gè)支持,使得它包含下面新增加的由客戶確定的schema 驗(yàn)證要求:
· 對(duì)lax 驗(yàn)證的支持
· 對(duì)dateTime、time和date 驗(yàn)證的完全支持,包括時(shí)區(qū)信息的保存。
· 改進(jìn)了對(duì)union和list類型的支持
3.1 支持Lax驗(yàn)證
XML Schema通過(guò)使用any、anyAttribute和anyType聲明來(lái)支持XML文檔中的通配符。例如,看看下面的XML schema 聲明:
| <xs:complexType name="Order" mixed="true"> <xs:sequence> <xs:element name="CustomerName"/> <xs:element name="OrderTotal"/> <xs:any namespace="##other" processContents="skip" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> |
這個(gè)schema 聲明定義了一個(gè)叫做Order 的XML元素,它必須包含叫做CustomerName和OrderTotal的子元素。此外,這個(gè)元素可以包含Order類型所屬的命名空間之外的其它命名空間的無(wú)限制數(shù)目的其它元素。下面的XML顯示了一個(gè)包含由這個(gè)schema 聲明所定義的Order 元素的一個(gè)實(shí)例的XML文檔。注意這個(gè)order 還包含了一個(gè)shp:Delivery 元素,它沒(méi)有在schema中明確定義。
| <Invoice xmlns="http://adventure-works.com/order" xmlns:shp="http://adventure-works.com/shipping"> <Order> <CustomerName>Graeme Malcolm</CustomerName> <OrderTotal>299.99</OrderTotal> <shp:Delivery>Express</shp:Delivery> </Order> </Invoice> |
對(duì)通配符的驗(yàn)證取決于在schema定義中的通配符的processContents 屬性。在SQL Server 2005中,schema可以使用用于any和anyAttribute聲明的skip和strict 的processContents值。在前面的示例中,這個(gè)通配符元素的processContents屬性被設(shè)置為skip,所以不會(huì)對(duì)這個(gè)元素的內(nèi)容進(jìn)行驗(yàn)證。即使這個(gè)schema集合包含一個(gè)對(duì)shp:Delivery元素的聲明(例如,定義一組有效的發(fā)送方法對(duì)Order元素中的通配符),這個(gè)元素也不會(huì)被驗(yàn)證,除非在Order元素中對(duì)通配符的聲明將它的processContents屬性設(shè)置為strict。
SQL Server 2008增加了對(duì)第三方驗(yàn)證的支持。通過(guò)將一個(gè)通配符的processContents屬性設(shè)置為lax ,你可以對(duì)具有相應(yīng)的schema 聲明的任何元素進(jìn)行驗(yàn)證,但忽略沒(méi)有在schema 中定義的所有元素。繼續(xù)前面的示例,如果你將schema中對(duì)通配符元素的聲明中的processContents屬性設(shè)置為lax 并增加一個(gè)對(duì)shp:Delivery元素的聲明,那么在XML文檔中的shp:Delivery 元素會(huì)被進(jìn)行驗(yàn)證。然而,如果不是shp:Delivery 元素,而是該文檔包含了一個(gè)沒(méi)有在schema中聲明的元素,那么這個(gè)元素會(huì)被忽略掉。
此外,XML Schema 規(guī)格定義anyType聲明具有對(duì)它的內(nèi)容模型的lax處理方式。SQL Server 2005不支持lax處理,所以會(huì)嚴(yán)格的對(duì)內(nèi)容進(jìn)行驗(yàn)證。SQL Server 2008支持anyType 內(nèi)容的lax處理,因此內(nèi)容會(huì)被正確的進(jìn)行驗(yàn)證。
3.2 對(duì) xs:dateTime 的完全支持
你可以在一個(gè)XML schema 中使用dateTime數(shù)據(jù)類型來(lái)定義日期和時(shí)間數(shù)據(jù)。日期和時(shí)間數(shù)據(jù)以2007-08-01T09:30:00:000Z的格式來(lái)顯示,這表示的是通用協(xié)調(diào)時(shí)(UTC)2007年8月1日早上9:30,這用Z表示。其它的時(shí)區(qū)顯示的時(shí)間與通用協(xié)調(diào)時(shí)間不同,因此例如你能使用太平洋標(biāo)準(zhǔn)時(shí)間2007-12-25T06:00:00:000-8:00來(lái)顯示2007年12月25日的早上6:00(它比UTC時(shí)間滯后8小時(shí))。
XML Schema 規(guī)格定義了可選擇的dateTime、date和time 數(shù)據(jù)類型的時(shí)區(qū)組件。然而,在SQL Server 2005中你必須提供一個(gè)用于dateTime、date和time數(shù)據(jù)的時(shí)區(qū)。此外,SQL Server 2005不保存你的dateTime或time數(shù)據(jù)的時(shí)區(qū)信息,但是會(huì)將它規(guī)格化為UTC時(shí)間(所以例如,如果你的XML有個(gè)2007-12-25T06:00:00:000-8:00的值,SQL Server 2005會(huì)將它規(guī)格化為2007-12-25T14:00:00:000Z。)在SQL Server 2008中沒(méi)有這些限制,所以當(dāng)你存儲(chǔ)dateTime、date或time數(shù)據(jù)時(shí)你可以省略時(shí)區(qū)信息,并且你提供的任何時(shí)區(qū)信息都會(huì)被保存下來(lái)。
分享:也談如何縮小SQL SERVER日志文件前幾天也碰到日志文件過(guò)大的問(wèn)題,數(shù)據(jù)庫(kù)實(shí)際大小為600M, 日志文件實(shí)際大小為33M, 但日志文件占用空間為2.8G! 試了多種方式,SHIRNK DATABASE, TRUNCATE LOG FILE, 都沒(méi)辦法將文件縮小。無(wú)論
- sql 語(yǔ)句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無(wú)法查看數(shù)據(jù)庫(kù),提示 無(wú)法為該請(qǐng)求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語(yǔ)句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過(guò)程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫(kù)教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫(kù)教程推薦
- 淺談Linq To Sql集成數(shù)據(jù)庫(kù)語(yǔ)言的優(yōu)劣
- mssql2005字符串連接方法 避免無(wú)效的連接錯(cuò)誤
- 詳解SQL Server與ASP互操作的時(shí)間處理
- 如何使SQL Server 2000中生成XML
- SQLSERVER2008中CTE的Split與CLR的性能比較
- 詳解MySQL權(quán)限
- 揭秘操作日期的SQL語(yǔ)句大全
- 解析Oracle數(shù)據(jù)庫(kù)編寫(xiě)有效事務(wù)指導(dǎo)方針
- 怎樣升級(jí)SQL Server 2008數(shù)據(jù)庫(kù)引擎
- SQL Server2005打開(kāi)數(shù)據(jù)表中的XML內(nèi)容時(shí)報(bào)錯(cuò)的解決辦法
猜你也喜歡看這些
- 網(wǎng)站模板:以數(shù)據(jù)庫(kù)字段分組顯示數(shù)據(jù)的sql語(yǔ)句
- 10大關(guān)系數(shù)據(jù)庫(kù)SQL注入工具一覽
- mysql出現(xiàn)“Incorrect key file for table”處理方法
- linux Xtrabackup安裝及使用方法
- MySQL筆記之?dāng)?shù)學(xué)函數(shù)詳解
- Windows環(huán)境下重置mysql密碼操作命令
- mysql使用source 命令亂碼問(wèn)題解決方法
- mysql常用監(jiān)控腳本命令整理
- MySQL和Access的區(qū)別
- MYSQL 批量替換之replace語(yǔ)法的使用詳解
- 相關(guān)鏈接:
- 教程說(shuō)明:
Mssql數(shù)據(jù)庫(kù)教程-SQL Server 2008中有關(guān)XML的新功能(3)
。