SQL Server數據庫之一個 SQL 2005 XML 查詢的例子
此文章主要向大家講述的是SQL Server數據庫之一個 SQL 2005 XML 查詢的例子,我們大家都知道SQL Server 2005 新增的一個特性主要是對 XML 的支持的增強,現在有很多的文章都在鼓吹 XML 是如何如何的有用,但慚愧的是我學習了好幾年的數據庫。
很少在實際應用中觸碰過 XML,因為用戶很少有這方面的需求。最近用戶給了一段類似下面結。
SQL Server 2005 新增的一個特性是對 XML 的支持的增強,好多文章都在鼓吹 XML 是如何如何的有用,但慚愧的是我學習了好幾年的數據庫,很少在實際應用中觸碰過 XML,因為用戶很少有這方面的需求。最近用戶給了一段類似下面結構的 XML。
- declare @xdoc xml
- set @xdoc = '<conn>
- <mysql servername="192.168.1.120,3306">
- <user name="root" password="" />
- <user name="dba" password="" />
- <user name="user" password="" />
- </mysql>
- <mssql servername="192.168.1.110,1433">
- <user name="sa" password="" />
- <user name="dba" password="" />
- <user name="user" password="" />
- </mssql>
- <excel id="1" path="c:\database\" filename="source1.xls" />
- <excel id="2" path="d:\database\" filename="source2.xls" />
- <excel id="3" path="e:\database\" filename="source3.xls" />
- </conn>
- '
具體的要求就是:在 SQL 2005 中編寫一個查詢,取出 excel id=1 時的 path & filename。這個需求提醒了我,XML 在數據庫中的一個常用需求就是取出 XML 節點中參數的值。
1. SQL 2005 XML 取出節點數據方法一。
- select excel_path = t.c.value('@path' ,'varchar(255)')
- ,excel_name = t.c.value('@filename' ,'varchar(255)')
- from @xdoc.nodes('/conn/excel') t (c)
- where t.c.value('@id', 'int') = 1
- excel_path excel_name
- c:\database\ source1.xls
2. SQL 2005 XML 取出節點數據方法二。
- select excel_path = @xdoc.value('(/conn/excel[@id="1"]/@path)[1]', 'varchar(255)')
- ,excel_name = @xdoc.value('(/conn/excel[@id="1"]/@filename)[1]', 'varchar(255)')
- excel_path excel_name
- c:\database\ source1.xls
3. SQL 2005 XML 取出節點數據方法三。
該方法是方法二的改進,我們可以在 xml.value() 函數中使用 sql:variable() 來為 XML 節點中的 id 提供一個動態的參數。
- declare @excel_id int
- set @excel_id = 1
- select excel_path = @xdoc.value('(/conn/excel[@id=sql:variable("@excel_id")]/@path)[1]', 'varchar(255)')
- ,excel_name = @xdoc.value('(/conn/excel[@id=sql:variable("@excel_id")]/@filename)[1]', 'varchar(255)')
- excel_path excel_name
- c:\database\ source1.xls
以上的相關內容就是對SQL Server數據庫之一個SQL 2005 XML查詢例子的介紹,望你能有所收獲。
【編輯推薦】