- -用SQL多條可以將多條數據組成一棵XML樹L一次插入
- --將XML樹作為varchar參數傳入用
- --insert xx select xxx from openxml() 的語法插入數據
- -----------------------------------導入,導出xml--------------------------
- --1導入實例
- --單個表
- create table Xmltable(Name nvarchar(20),Nowtime nvarchar(20))
- declare @s as nvarchar(2000);
- set @s = N''
- <Xmltables>
- <Xmltable Name="1" Nowtime="1900-1-1">0</Xmltable>
- <Xmltable Name="2" Nowtime="1900-1-1">0</Xmltable>
- <Xmltable Name="3" Nowtime="1900-1-1">0</Xmltable>
- <Xmltable Name="4" Nowtime="1900-1-1">0</Xmltable>
- <Xmltable Name="5" Nowtime="1900-1-1">0</Xmltable>
- </Xmltables>'';
- declare @idHandle as int ;
- EXEC sp_xml_preparedocument @idHandle OUTPUT, @s
- insert into Xmltable(Name,Nowtime)
- select * from openxml(@idHandle,N''/Xmltables/Xmltable'')
- with dbo.xmltable
- EXEC sp_xml_removedocument @idHandle
- select * from Xmltable
- -----------------------讀入第二個表數據--------------------
- create table Xmlta(Name nvarchar(20),Nowtime nvarchar(20))
- declare @s as nvarchar(4000);
- set @s =N''
- <Xmltables>
- <Xmltb Name="6" Nowtime="1900-2-1">0</Xmltable>
- <Xmlta Name="11" Nowtime="1900-2-1">0</Xmlta>
- </Xmltables>
- '';
- declare @idHandle as int ;
- EXEC sp_xml_preparedocument @idHandle OUTPUT, @s
- insert into Xmlta(Name,Nowtime)
- select * from openxml(@idHandle,N''/Xmltables/Xmlta'')
- with dbo.xmlta
- EXEC sp_xml_removedocument @idHandle
- select * from Xmlta
- drop table Xmlta
- -----------------------同時讀入多表數據----------------
- create table Xmlta(Name nvarchar(20),Nowtime datetime)
- create table Xmltb(Name nvarchar(20),Nowtime datetime)
- declare @s as nvarchar(4000);
- set @s =N''
- <Xmltables>
- <Xmlta Name="1" Nowtime="1900-2-1">0</Xmlta>
- <Xmltb Name="2" Nowtime="1900-2-1">0</Xmltb>
- </Xmltables>
- '';
- --<Xmlta ></Xmlta> 則插入的數據為null
- declare @idHandle as int ;
- EXEC sp_xml_preparedocument @idHandle OUTPUT, @s
- --表a
- insert into Xmlta(Name,Nowtime)
- select * from openxml(@idHandle,N''/Xmltables/Xmlta'')
- with dbo.Xmlta
- --表b
- insert into Xmltb(Name,Nowtime)
- select * from openxml(@idHandle,N''/Xmltables/Xmltb'')
- with dbo.Xmltb
- EXEC sp_xml_removedocument @idHandle
- select * from Xmlta
- select * from Xmltb
- drop table Xmlta,Xmltb
- --生成xml文件單表
- DECLARE @xVar XML
- SET @xVar = (SELECT * FROM Xmltable FOR XML AUTO,TYPE)
- select @xVar
- --1讀取xml文件插入表中
- DECLARE @hdoc int
- DECLARE @doc xml
- select @doc=BulkColumn from (SELECT *
- FROM OPENROWSET(BULK ''E:\xml.xml'',SINGLE_BLOB) a)b
- EXEC sp_xml_preparedocument @hdoc OUTPUT,@doc
- SELECT * into #temp
- FROM OPENXML (@hdoc,N''/root/dbo.xmltable'')
- with (name nvarchar(20),Intro nvarchar(20))
- exec sp_xml_removedocument @hdoc
- --2讀取xml文件插入表中
- SELECT * into #temp FROM OPENROWSET(
- BULK ''E:\xml.xml'',SINGLE_BLOB) AS x
- DECLARE @hdoc int
- DECLARE @doc xml
- select @doc=BulkColumn from #temp
- EXEC sp_xml_preparedocument @hdoc OUTPUT,@doc
- SELECT * into #temp2
- FROM OPENXML (@hdoc,N''/root/dbo.xmltable'')
- with (name nvarchar(20),Intro nvarchar(20))
- exec sp_xml_removedocument @hdoc
- /*
- ---空的處理
- <dbo.xmltable name="1" Intro="" />
- <dbo.xmltable name="2" />
- <dbo.xmltable name="3" Intro="c" />
- 1
- 2 NULL
- 3 c
- */
- drop table xmlt
- ------------------------------------xml數據操作------------------
- --類型化的XML
- CREATE TABLE xmlt(ID INT PRIMARY KEY, xCol XML not null)
- --T-sql生成數據
- insert into xmlt values(1,
- ''<Xmltables>
- <Xmltable Name="1" NowTime="1900-1-1">1</Xmltable>
- <Xmltable Name="2" NowTime="1900-1-2">2</Xmltable>
- <Xmltable Name="3" NowTime="1900-1-3">3</Xmltable>
- <Xmltable Name="4" NowTime="1900-1-4">4</Xmltable>
- <Xmltable Name="5" NowTime="1900-1-5">5</Xmltable>
- </Xmltables>'')
- --dataset生成數據
- insert into xmlt values(2,
- ''<?xml version="1.0" encoding="gb2312" ?>
- <Xmltables>
- <Xmltable><Name>1</Name><NowTime>1900-1-1</NowTime>1</Xmltable>
- <Xmltable><Name>2</Name><NowTime>1900-1-2</NowTime>2</Xmltable>
- <Xmltable><Name>3</Name><NowTime>1900-1-3</NowTime>3</Xmltable>
- </Xmltables>'')
- --讀取Name=1 的節點,請使用
- SELECT xCol.query(''/Xmltables/Xmltable[@Name="1"]'') from xmlt where ID =1
- --讀取Name=1 的節點值,請使用
- SELECT xCol.query(''/Xmltables/Xmltable[@Name="1"]/text()'') from xmlt where ID =1
- --讀取Name=5 的Name 屬性值,請使用
- SELECT xCol.query(''data(/Xmltables/Xmltable[@Name])[5]'') from xmlt where ID =1
- --讀取所有節點Name
- SELECT nref.value(''@Name'', ''varchar(max)'') LastName
- FROM xmlt CROSS APPLY xCol.nodes(''/Xmltables/Xmltable'') AS R(nref) where ID=1
- --讀取所有節點NowTime
- SELECT nref.value(''@NowTime'', ''varchar(max)'') LastName
- FROM xmlt CROSS APPLY xCol.nodes(''/Xmltables/Xmltable'') AS R(nref) where ID=1
- SELECT xCol.query(''data(/Xmltables/Xmltable[@Name=5]/@NowTime)[1]'') from xmlt where ID =1
- --讀取Name=1 的Name 屬性值
- SELECT xCol.value(''data(/Xmltables/Xmltable//Name)[1]'',''nvarchar(max)'') FROM xmlt where ID=2
- --讀取NowTime=1 的NowTime 屬性值
- SELECT xCol.value(''data(/Xmltables/Xmltable/NowTime)[1]'',''nvarchar(max)'') FROM xmlt where ID=2
- --SELECT xCol.value(''data(/Xmltables/Xmltable[@Name])[1]'',''nvarchar(max)'') FROM xmlt where ID=2
- ------------------------------------------函數使用----------------
- --query()、exist()
- SELECT pk, xCol.query(''/root/dbo.xmltable/name'') FROM docs
- SELECT xCol.query(''/root/dbo.xmltable/name'') FROM docs
- WHERE xCol.exist (''/root/dbo.xmltable'') = 1
- --modify()
- UPDATE docs SET xCol.modify(''
- insert
- <section num="2">
- <heading>Background</heading>
- </section>
- after (/doc/section[@num=1])[1]'')
- --value()
- SELECT xCol.value(''data((/root/dbo.xmltable//name))[2]'',''nvarchar(max)'') FROM docs
- where pk=3
- --nodes()
- SELECT nref.value(''@Name'', ''varchar(max)'') LastName
- FROM xmlt CROSS APPLY xCol.nodes(''/Xmltables/Xmltable'') AS R(nref)
- --query()、value()、exist() 和nodes(),modify()
- SELECT CAST(T.c as xml).query(''/root/dbo.xmltable/name'')
- FROM OPENROWSET(BULK ''E:\xml.xml'',SINGLE_BLOB) T(c)
SQLSERVER 2005中使用sql語句對xml文件和其數據的進行操作(很全面)
2020-07-01 15:32mssql教程網 Sql Server
由于數據庫對xml數據直接處理有很多優勢,05也對這方面加強了功能。下面是一些實例代碼,大家可以參考下。
延伸 · 閱讀
- 2022-03-07C#操作XML文件步驟
- 2022-03-07Spring Xml裝配Bean的思路詳解
- 2022-03-02C#使用XmlDocument或XDocument創建xml文件
- 2022-02-22C#實現XML文件讀取
- 2022-01-25C#實現連接SQL Server2012數據庫并執行SQL語句的方法
- 2022-01-24圖文詳解Mysql中如何查看Sql語句的執行時間
- Sql Server
SQLServer2005 批量查詢自定義對象腳本
SQLServer2005 批量查詢自定義對象腳本,使用系統函數object_definition和系統表 sysobjects 就可以了 ...
- Sql Server
SQL2005 存儲過程解密方法
SQL2005 存儲過程解密方法,需要的朋友可以參考下。...
- Sql Server
SQL JOIN 連接詳細介紹及簡單使用實例
這篇文章主要介紹了SQL JOIN 連接詳細介紹及簡單使用實例的相關資料,需要的朋友可以參考下 ...
- Sql Server
深入SQLServer中ISNULL與NULLIF的使用詳解
本篇文章是對SQLServer中ISNULL與NULLIF的使用進行了詳細分析介紹,需要的朋友參考下 ...
- Sql Server
SQL_Server全文索引的用法解析
SQL Server全文索引相信大家都有一定的了解,下面就為您介紹SQL Server全文索引的用法及相關的語句,希望可以讓您對SQL Server全文索引能有更深的認識 ...
- Sql Server
SQLServer2005創建定時作業任務
這篇文章主要為大家介紹了SQLServer2005創建定時作業任務的詳細過程,具有一定的參考價值,感興趣的小伙伴們可以參考一下 ...
- Sql Server
SQLServer 數據庫的數據匯總完全解析(WITH ROLLUP)
乍一看,好像很容易,用group by好像能實現?但仔細研究下去,你又會覺得group by也是無能為力,總欠缺點什么,無從下手。那么,到底該如何做呢?別急,...
- Sql Server
三種SQL分頁查詢的存儲過程代碼
三種SQL分頁查詢的存儲過程代碼,需要的朋友可以參考下。 ...