:
:
/SPAN>
TABLE代表一系列信息,包括目錄中某個人的名字、所有的電話號碼和那個人的其他信息(譬如說,地址等)。
這個XML的模型如下:
盡管創建這個XML模型不是不可能的,我們仍然在本文中使用這個簡單的例子。
首先,我們將提供一些背景知識使其更全面。數據來源於三個方面:包含員工的名(fname)和姓(lname)的職工表;包含員工電話類型(phone_type)和電話號碼(phone_no)的電話表;包含員工其他信息(如地址等)的其他信息表(other_info)。
如果你想將信息從這些表中抓取到一個記錄集中,SQL查詢可以如下:
SELECT employee.lname, employee.fname, phone.phone_type, phone.phone_no,
other_info.info_type, other_info.info_data FROM employee LEFT JOIN phone ON
phone.employee_id
= employee.employee_id LEFT JOIN other_info ON
other_info.employee_id = employee.employee_id
當你需要SQL 2000中有XML的時候,你通常可以在查詢字符串的末尾輸入一個FOR XML AUTO, ELEMENTS語句,你就可以得到想要的XML字符串。但是,多個節點會有一點小問題。單個節點很容易,但當你引用多個表格時,你可能不會花整天時間去嘗試獲得想要的XML輸出。
另一個方法就是關閉行計算和數據輸出。你可以通過將一個指針移入母表數據,用一個指令來操作記錄,然後從帶有FOR XML AUTO、ELEMENTS語句的其他表格選擇相關記錄以分流XML輸出來實現。
這個功能最好保存到一個存儲程序,因為指針比較慢,而一個存儲程序被事先編輯好。下面就是完成這項任務的存儲程序(Transact SQL)。
DECLARE @employee_id int
DECLARE @fname varchar(50)
DECLARE @lname varchar(50)
DECLARE phone_cursor CURSOR FOR SELECT employee_id, fname, lname FROM employees
ORDER BY lname, fname
SET NOCOUNT ON
OPEN phone_cursor
FETCH NEXT FROM phone_cursor INTO @employee_id, @fname, @lname
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT '
'
SELECT phone_type, phone_no FROM phone WHERE employee_id =
@employee_id FOR XML AUTO, ELEMENTS
SELECT info_type, info_data FROM other_info WHERE employee_id =
@employee_id FOR XML AUTO, ELEMENTS
SELECT ''
FETCH NEXT FROM phone_cursor INTO @employee_id, @fname, @lname
END
CLOSE phone_cursor
DEALLOCATE phone_cursor
SET NOCOUNT OFF
GO
這幾句SQL創建了一個用以存儲員工數據和重復執行的指針。為了解除每一個SELECT語句後的行計算輸出功能,NOCOUNT被設置為ON。當指針中的每條記錄在被操作的時候,構成了一個包含著XML輸出的名和姓節點字符串。電話信息和其他信息也都創建了XML。
然後,父節點關閉。在成功地完成了指針操作以後,關閉指針並對其再分配。這就得到了一個符合目標XML模型的XML字符串。
為了有效的使用這個XML輸出字符串,輸出必須存儲在一個ADO流對象中。利用流對象中的ReadText方法可以訪問數據:
.Connection") Response.Write aDOStream.ReadText(-1) aDOStream.Close
<%
Dim adoConn, adoCmd
Dim aDOStream
Set adoConn = Server.CreateObject("ADODB文章整理:學網 http://www.xue5.com (本站) [1] [2] [3]
Set adoCmd = Server.CreateObject("ADODB.Command")
adoConn.ConnectionString = "Some Connection String To MS SQL 2K"
adoConn.Open
Set adoCmd.ActiveConnection = adoConn
Set aDOStream = Server.CreateObject("ADODB.Stream")
adoCmd.CommandType = 4 'adCmdStoredProc
adoCmd.CommandText = "get_test_phone"
aDOStream.Open
adoCmd.PropertIEs("Output Stream") = aDOStream
adoCmd.Execute ,,1024 'adExecuteStream
Set aDOStream = Nothing
adoConn.Close
Set adoCmd = Nothing
Set adoConn = Nothing
%>
以上代碼創建了一個ADO到SQL 2000的連接,執行了一個存儲程序。結果被儲存在ADO流對象(aDOStream)中。其數據寫入Response緩沖器,流對象被關閉,然後是一些“清倉”操作。
這個范例提供了一個創建用戶化XML方案的一般方法。通過將Html表格連接到XML數據島,你可以創造一些針對性的解決方法。