- -用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
SQLServer 数据库故障修复顶级技巧之一
SQL Server 2005 和 2008 有几个关于高可用性的选项,如日志传输、副本和数据库镜像。 ...
- Sql Server
SqlServer将查询结果转换为XML和JSON
这篇文章主要介绍了SqlServer将查询结果转换为XML和JSON的相关资料,需要的朋友可以参考下 ...
- Sql Server
SQL查询入门(上篇) 推荐收藏
SQL语言是一门简单易学却又功能强大的语言,它能让你快速上手并写出比较复杂的查询语句。 ...
- Sql Server
SQL查询的底层运行原理深入分析
这篇文章主要给大家介绍了关于SQL查询的底层运行原理,文中通过实例代码结束的非常详细,对大家学习或者使用SQL具有一定的参考学习价值,需要的朋友...
- Sql Server
sql的临时表使用小结
这篇文章主要介绍了sql的临时表使用小结,需要的朋友可以参考下 ...
- Sql Server
SQL server 随机数函数
在SQL server中,有个随机函数rand(),有不少新手可能不知道存在这个函数,现在我就把这个函数的一些随机数生成技巧写出来,这是面向菜鸟的,老鸟请不要...
- Sql Server
针对Sqlserver大数据量插入速度慢或丢失数据的解决方法
这篇文章主要介绍了针对Sqlserver大数据量插入速度慢或丢失数据的解决方法,很有实用价值,需要的朋友可以参考下 ...
- Sql Server
SQL server 2008 数据安全(备份和恢复数据库)
备份和恢复数据库对于数据库管理员来说是保证数据安全性的一项重要工作。SQL server 2008提供了高性能的备份和恢复功能,可以实现多种方式的数据库备份...