- -用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分页查询的存储过程代码,需要的朋友可以参考下。 ...