關(guān)于SQLServer2005的學習筆記 XML的處理
詳見 SQLServer 聯(lián)機幫助:
主題
說明
query() 方法( xml 數(shù)據(jù)類型)
此方法用于對 XML 實例進行查詢。
value() 方法( xml 數(shù)據(jù)類型)
此方法用于從 XML 實例檢索 SQL 類型的值。
exist() 方法( xml 數(shù)據(jù)類型)
此方法用于確定查詢是否返回非空結(jié)果。
modify() 方法( xml 數(shù)據(jù)類型)
此方法用于指定 XML DML 語句以執(zhí)行更新。
nodes() 方法( xml 數(shù)據(jù)類型)
此方法用于將 XML 拆分成多行以將 XML 文檔的組成部分傳播到行集中。
閑話少說,首先創(chuàng)建一個包含 xml 類型的數(shù)據(jù)表,其次創(chuàng)建一個 xml 文件,在服務端把 xml 文件內(nèi)容加載該數(shù)據(jù)表中。
CREATE TABLE VisioXML
(
ID INT,
Doc XML
);
GO
創(chuàng)建一個名為 xxx.xml 的文件,內(nèi)容如下
/*
<ROOT>
<ROW>
<ID>1</ID>
<NAME SEX="MALE">WBQ</NAME>
</ROW>
<ROW>
<ID>2</ID>
<NAME SEX="FEMALE">CZH</NAME>
</ROW>
</ROOT>
*/
INSERT INTO VisioXML(ID,Doc)
SELECT 4,* FROM OPENROWSET(BULK 'e:\xxx.xml',SINGLE_BLOB) AS x;
-- 以下為 value() 和 query() 的用法
--SELECT * FROM VisioXML WHERE ID=4
SELECT
Doc.value('(/ROOT/ROW[1]/ID/text())[1]','int') RootRowID1, -- 第一行 ID 的值,并且轉(zhuǎn)換為 int 類型
Doc.value('(/ROOT/ROW[2]/ID/text())[1]','int') RootRowID2, -- 第二行 ID 的值,并且轉(zhuǎn)換為 int 類型
Doc.value('(/ROOT/ROW[1]/NAME/text())[1]','varchar(20)') RootRowNAME1, -- 第一行 NAME 的值,并且轉(zhuǎn)換為 VARCHAR 類型
Doc.value('(/ROOT/ROW[1]/NAME/@SEX)[1]','varchar(20)') RootRowNAME1SEX, -- 第一行 NAME 中 SEX 屬性的值,并且轉(zhuǎn)換為 VARCHAR 類型
Doc.query('/ROOT') Root, --ROOT 下的所有 XML 內(nèi)容,類型為 XML
Doc.query('/ROOT/ROW[1]') RootRow1, --ROOT 下第一行所有的 XML 內(nèi)容,類型為 XML
Doc.query('/ROOT/ROW[2]') RootRow2 --ROOT 下第二行所有的 XML 內(nèi)容,類型為 XML
FROM VisioXML
WHERE ID=4
-- 以下為 exist() 函數(shù)在兩種環(huán)境下的用法
SELECT
Doc.exist('/ROOT/ROW[1]/NAME[(@SEX cast as xs:string?) = xs:string("MALE")]') Row1EQStringMale,
Doc.exist('/ROOT/ROW[1]/NAME[(@SEX cast as xs:string?) = "MALE"]') Row1EQMale,
Doc.exist('/ROOT/ROW[1]/ID[(text()[1] cast as xs:float?) = xs:float(1)]') Row1EQfloat1,
Doc.exist('/ROOT/ROW[2]/ID[(text()[1] cast as xs:float?) = 2]') Row1EQ1
FROM VisioXML
WHERE ID=4
SELECT ID,Doc
FROM VisioXML
WHERE ID=4
AND Doc.exist('/ROOT/ROW[1]/NAME[(@SEX)]')=1 -- 第一行 NAME 中存在 SEX 屬性
--AND Doc.exist('/ROOT/ROW[1]/NAME[not(@SEX)]')=1 -- 第一行 NAME 中不存在 SEX 屬性
--AND Doc.exist('/ROOT/ROW[1][not(ID/*)]')=1 -- 第一行不存在 ID 字段
--AND Doc.exist('/ROOT/ROW[1][(ID/*)]')=1 -- 第一行存在 ID 字段
相關(guān)文章
sql2005附加數(shù)據(jù)庫操作步驟(sql2005還原數(shù)據(jù)庫)
本文介紹了sql2005附加數(shù)據(jù)庫的操作步驟,簡單幾步就可以完成,大家參考使用吧2014-01-01SQL 2005 ERROR:3145 解決辦法(備份集中的數(shù)據(jù)庫備份與現(xiàn)有的數(shù)據(jù)庫不同)
在圖形界面中,選擇備份文件,設置覆蓋原有數(shù)據(jù)庫,指定現(xiàn)數(shù)據(jù)庫文件所在的位置,選擇錯誤回滾,點擊確定2013-01-01sql2005 數(shù)據(jù)庫轉(zhuǎn)為sql2000數(shù)據(jù)庫的方法(數(shù)據(jù)導出導入)
今天一網(wǎng)友問我如何將sql2005數(shù)據(jù)庫轉(zhuǎn)換為sql2000,因為sql2005不如用sql2000更簡單與熟悉,其實就是通過數(shù)據(jù)導出導入的方法即可,這里分享下方便需要的朋友2012-11-11SQL server 2005將遠程數(shù)據(jù)庫導入到本地的方法
這篇文章主要介紹了SQL server 2005將遠程數(shù)據(jù)庫導入到本地的方法,需要的朋友可以參考下2015-01-01SQL Server 2005 Management Studio Express企業(yè)管理器將英文變成簡體中文版的實現(xiàn)方
這篇文章主要介紹了SQL Server 2005 Management Studio Express企業(yè)管理器將英文變成簡體中文版的實現(xiàn)方法,需要的朋友可以參考下2015-09-09sysservers 中找不到服務器,請執(zhí)行 sp_addlinkedserver 將該服務器添加到sysserver
sysservers 中找不到服務器,請執(zhí)行 sp_addlinkedserver 將該服務器添加到sysserver 錯誤的解決方法2011-09-09一步一步教你創(chuàng)建SQL 2005計劃任務應用圖解教程
使用sql的計劃任務可以處理一些特殊環(huán)境的數(shù)據(jù),除了使用windows系統(tǒng)的計劃任務來定時處理,不過要配合程序才行,有些事情可以直接使用sql本身的計劃任務,更方便,所以本文圖解一下Sql2005計劃任務的創(chuàng)建使用。2010-03-03