首頁 資料庫 mysql教程 把XML数据插入到SQL Server数据库的表中

把XML数据插入到SQL Server数据库的表中

Jun 07, 2016 pm 03:30 PM
server sql xml 插入 數據 資料庫 表中

6.3 把XML数据插入到SQL Server数据库的表中 我们可以通过使用系统存储过程sp_xml_preparedocument的OPENXML函数把XML文档中的数据插入数据库中。其中,系统存储过程sp_xml_preparedocument用来创建一个能被插入数据库的XML文档的内部表示,该存储过程返回一

6.3  把XML数据插入到SQL Server数据库的表中

我们可以通过使用系统存储过程sp_xml_preparedocument的OPENXML函数把XML文档中的数据插入数据库中。其中,系统存储过程sp_xml_preparedocument用来创建一个能被插入数据库的XML文档的内部表示,该存储过程返回一个可以访问XML文档内部表示的句柄,另一方面,系统存储过程sp_xml_removedocument可以用来删除XML文档的内部表示。

系统存储过程sp_xml_preparedocument的语法如下:

<ol><li><span><span>sp_xml_preparedocument  handleddoc  </span><span>OUTPUT</span><span>,xmltext </span></span></li></ol>
登入後複製

其中:

● handleddoc代表XML文档句柄的整数值。

● xmltext代表原始的XML文档的文本值。

系统存储过程sp_xml_removedocument的语法如下:

<ol><li><span>sp_xml_removedocument  handleddoc   </span></li></ol>
登入後複製

其中:

handleddoc代表XML文档句柄的整数值。

上述这两个存储过程都可以使用函数OPENXML,函数OPENXML的语法如下:

<ol>
<li><span>OPENXML(handleddoc,rowpattern,flagvalue)  </span></li>
<li>
<span>With</span><span> tablename </span>
</li>
</ol>
登入後複製

其中:

● handleddoc代表XML文档句柄的整数值。

● rowpattern代表来识别XML文档的节点XPath模式的可变长字符串的值。

● flagvalue代表XML数据和相关的行集之间映射的整数值。如果值为1表示要对数据库中的字段做基于属性的映射;如果值为2表示要对数据库中的字段做基于元素的映射。

● tablename代表数据库中的表名。

系统存储过程sp_xml_preparedocument读入XML文档内的文本并用MSXML解析器进行处理。处理以后,XML文档以带有元素、属性和文本的树型结构显示。OPENXML函数应用该树型结构并生成包含XML文档所有部分的行集。使用OPENXML和INSERT语句,即可以将行集中的数据插入到表中。下面通过实例进行讲解。

实例6-1  以属性的形式将XML数据插入到SQL Server数据库的表中

(1) 在SQL Server查询分析器窗口中输入以下代码:

<ol>
<li><span>USE school  </span></li>
<li>
<span>LECT * </span><span>FROM</span><span> student </span>
</li>
</ol>
登入後複製

运行后,先来查看插入之前student表中的数据,如图6-1所示。

把XML数据插入到SQL Server数据库的表中 

(2) 重新输入以下代码:

<ol>
<li><span>1  USE school  </span></li>
<li>
<span>2  </span><span>DECLARE</span><span> @doc </span><span>varchar</span><span>(1000)  </span>
</li>
<li>
<span>3  </span><span>DECLARE</span><span> @idoc </span><span>int</span><span> </span>
</li>
<li>
<span>4  </span><span>SET</span><span> @doc='<root>  </root></span>
</li>
<li><span>5           <student><span>"5"</span><span> </span><span>name</span><span>=</span><span>"cathy"</span><span> </span></student></span></li>
<li>
<span>6            sex=</span><span>"female"</span><span> age=</span><span>"21"</span><span>>  </span>
</li>
<li><span>7              </span></li>
<li><span>8            '  </span></li>
<li>
<span>9  </span><span>exec</span><span> sp_xml_preparedocument @idoc </span><span>output</span><span>,@doc  </span>
</li>
<li>
<span>10  </span><span>select</span><span> * </span><span>from</span><span> openxml(@idoc,</span><span>'/ROOT/student'</span><span>,1)  </span>
</li>
<li>
<span>11  </span><span>with</span><span>(id </span><span>int</span><span>,</span><span>name</span><span> </span><span>varchar</span><span>(40),sex </span><span>varchar</span><span>(20),  </span>
</li>
<li>
<span>12       age </span><span>int</span><span>)  </span>
</li>
<li>
<span>13  </span><span>insert</span><span> student  </span>
</li>
<li>
<span>14  </span><span>select</span><span> * </span><span>from</span><span> openxml(@idoc,</span><span>'/ROOT/student'</span><span>)  </span>
</li>
<li>
<span>15  </span><span>with</span><span> student  </span>
</li>
<li>
<span>16  </span><span>exec</span><span> sp_xml_removedocument @idoc </span>
</li>
</ol>
登入後複製

在上面代码的第4~8行创建了一个变量@doc并把XML数据存放在该变量中。然后,第9行执行系统存储过程sp_xml_preparedocument,来创建一个能把数据插入数据库的XML文档内部表示,该系统存储过程返回一个保存在变量@idoc中的句柄,可以用该句柄访问XML文档的内部表示。第10行使用一个select语句访问XML文档的内部表示,并把该文档中的所有数据显示出来。

(3) 运行程序,结果如图6-2所示。

把XML数据插入到SQL Server数据库的表中  

(4) 重新输入以下代码。

<ol>
<li><span>USE school  </span></li>
<li>
<span>SELECT</span><span> * </span><span>FROM</span><span> student </span>
</li>
</ol>
登入後複製
登入後複製

运行后,查看插入之后student表中的数据,如图6-3所示。

把XML数据插入到SQL Server数据库的表中   

通过图6-3可以清楚地看到,XML数据已经被插入到了数据库中。

实例6-2  以元素的形式将XML数据插入到SQL Server数据库的表中

接着上一个实例,我们继续进行数据的插入,不过这次是以元素的形式进行插入操作的。

首先在查询窗口中输入以下代码:

<ol>
<li><span><span>1  </span><span>DECLARE</span><span> @doc </span><span>varchar</span><span>(1000)  </span></span></li>
<li>
<span>2  </span><span>DECLARE</span><span> @idoc </span><span>int</span><span> </span>
</li>
<li>
<span>3  </span><span>SET</span><span> @doc='<root>  </root></span>
</li>
<li><span>4           <student>   </student></span></li>
<li><span>5           <id>6</id>  </span></li>
<li><span>6           <span>name</span><span>>sun</span><span>name</span><span>>  </span></span></li>
<li><span>7           <sex>male</sex>  </span></li>
<li><span>8           <age>24</age>  </span></li>
<li><span>9             </span></li>
<li><span>10          '  </span></li>
<li>
<span>11  </span><span>exec</span><span> sp_xml_preparedocument @idoc </span><span>output</span><span>,@doc  </span>
</li>
<li>
<span>12  </span><span>select</span><span> * </span><span>from</span><span> openxml(@idoc,</span><span>'/ROOT/student'</span><span>,2)  </span>
</li>
<li>
<span>13  </span><span>with</span><span>(id </span><span>int</span><span>,</span><span>name</span><span> </span><span>varchar</span><span>(40),sex </span><span>varchar</span><span>(20),  </span>
</li>
<li>
<span>14       age </span><span>int</span><span>)  </span>
</li>
<li>
<span>15  </span><span>insert</span><span> student  </span>
</li>
<li>
<span>16  </span><span>select</span><span> * </span><span>from</span><span> openxml(@idoc,</span><span>'/ROOT/student'</span><span>,2)  </span>
</li>
<li>
<span>17  </span><span>with</span><span> student  </span>
</li>
<li>
<span>18  </span><span>exec</span><span> sp_xml_removedocument @idoc </span>
</li>
</ol>
登入後複製

在上面代码的第3~10行创建了一个变量@doc,并把XML数据存放在该变量中。然后,第11行执行系统存储过程sp_xml_preparedocument,来创建一个能把数据插入数据库的XML文档的内部表示,该系统存储过程返回一个保存在变量@idoc中的句柄,可以用该句柄访问XML文档的内部表示。第12行使用一个select语句访问XML文档的内部表示,并把该文档中的所有数据显示出来了。该段代码与实例6-1中代码的唯一区别就在于变量中存放的XML数据是以元素的形式出现的,而不是属性的形式。

运行程序,结果如图6-4所示。

把XML数据插入到SQL Server数据库的表中   

重新输入以下代码:

<ol>
<li><span>USE school  </span></li>
<li>
<span>SELECT</span><span> * </span><span>FROM</span><span> student </span>
</li>
</ol>
登入後複製
登入後複製

运行后,查看插入之后student表中的数据,如图6-5所示。

把XML数据插入到SQL Server数据库的表中     

可以清楚地看到,XML数据已经被插入到了数据库中。

通过上述实例可以看到,在SQL Server 2005 中,OPENXML的功能得到了增强,它可以将XML类型数据传递到sp_xml_preparedocument存储过程中,并且可以在WITH子句中使用新的数据类型。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

AI新創集體跳槽OpenAI,Ilya出走後安全團隊重整旗鼓! AI新創集體跳槽OpenAI,Ilya出走後安全團隊重整旗鼓! Jun 08, 2024 pm 01:00 PM

上週,在內部的離職潮和外部的口誅筆伐之下,OpenAI可謂是內憂外患:-侵權寡姐引發全球熱議-員工簽署“霸王條款”被接連曝出-網友細數奧特曼“七宗罪」闢謠:根據Vox獲取的洩漏資訊和文件,OpenAI的高級領導層,包括Altman在內,非常了解這些股權回收條款,並且簽署了它們。除此之外,還有一個嚴峻而迫切的問題擺在OpenAI面前——AI安全。最近,五名與安全相關的員工離職,其中包括兩名最著名的員工,「超級對齊」團隊的解散讓OpenAI的安全問題再次被置於聚光燈下。 《財星》雜誌報道稱,OpenA

iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片 iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片 Jul 18, 2024 am 05:48 AM

蘋果公司最新發布的iOS18、iPadOS18以及macOSSequoia系統為Photos應用程式增添了一項重要功能,旨在幫助用戶輕鬆恢復因各種原因遺失或損壞的照片和影片。這項新功能在Photos應用的"工具"部分引入了一個名為"已恢復"的相冊,當用戶設備中存在未納入其照片庫的圖片或影片時,該相冊將自動顯示。 "已恢復"相簿的出現為因資料庫損壞、相機應用未正確保存至照片庫或第三方應用管理照片庫時照片和視頻丟失提供了解決方案。使用者只需簡單幾步

如何在PHP中處理資料庫連線錯誤 如何在PHP中處理資料庫連線錯誤 Jun 05, 2024 pm 02:16 PM

PHP處理資料庫連線報錯,可以使用下列步驟:使用mysqli_connect_errno()取得錯誤代碼。使用mysqli_connect_error()取得錯誤訊息。透過擷取並記錄這些錯誤訊息,可以輕鬆識別並解決資料庫連接問題,確保應用程式的順暢運作。

70B模型秒出1000token,程式碼重寫超越GPT-4o,來自OpenAI投資的程式碼神器Cursor團隊 70B模型秒出1000token,程式碼重寫超越GPT-4o,來自OpenAI投資的程式碼神器Cursor團隊 Jun 13, 2024 pm 03:47 PM

70B模型,秒出1000token,换算成字符接近4000!研究人员将Llama3进行了微调并引入加速算法,和原生版本相比,速度足足快出了快了13倍!不仅是快,在代码重写任务上的表现甚至超越了GPT-4o。这项成果,来自爆火的AI编程神器Cursor背后团队anysphere,OpenAI也参与过投资。要知道在以快著称的推理加速框架Groq上,70BLlama3的推理速度也不过每秒300多token。Cursor这样的速度,可以说是实现了近乎即时的完整代码文件编辑。有人直呼好家伙,如果把Curs

在PHP中使用MySQLi建立資料庫連線的詳盡教學 在PHP中使用MySQLi建立資料庫連線的詳盡教學 Jun 04, 2024 pm 01:42 PM

如何在PHP中使用MySQLi建立資料庫連線:包含MySQLi擴充(require_once)建立連線函數(functionconnect_to_db)呼叫連線函數($conn=connect_to_db())執行查詢($result=$conn->query())關閉連線( $conn->close())

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

如何在 Golang 中使用資料庫回呼函數? 如何在 Golang 中使用資料庫回呼函數? Jun 03, 2024 pm 02:20 PM

在Golang中使用資料庫回呼函數可以實現:在指定資料庫操作完成後執行自訂程式碼。透過單獨的函數新增自訂行為,無需編寫額外程式碼。回調函數可用於插入、更新、刪除和查詢操作。必須使用sql.Exec、sql.QueryRow或sql.Query函數才能使用回呼函數。

中國移動:人類正邁入第四次工業革命 正式公佈'三個計劃” 中國移動:人類正邁入第四次工業革命 正式公佈'三個計劃” Jun 27, 2024 am 10:29 AM

6月26日消息,在2024年世界行動通訊大會上海(MWC上海)開幕典禮上,中國移動董事長楊傑發表演說。他表示,當前,人類社會正邁入以資訊為主導、資訊和能量深度融合的第四次工業革命,即“數智化革命”,新質生產力加速形成。楊傑認為,從蒸汽機驅動的“機械化革命”,到電力、內燃機等驅動的“電氣化革命”,再到計算機和互聯網等驅動的“信息化革命”,每一輪工業革命都是以“信息和能量」為主線,帶來生產力發

See all articles