sql server 中xml 数据类型的insert、update、delete

近日对SQL操作XML作了如下整理:

1、插入 XML

DECLARE @myDoc XML
SET @myDoc = ‘<Root>
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features> </Features>
</ProductDescription>
</Root>‘
/*将元素节点插入到文档中*/
--在Features里插入一个节点
SET @myDoc.modify(
‘insert <Populate>Put your things into basket of bike</Populate>
into (/Root/ProductDescription/Features)[1]‘);
SELECT @myDoc;
--当前插入的节点为Features中第一个节点
SET @myDoc.modify(‘
insert <ride>people could ride bike</ride>
as first into (/Root/ProductDescription/Features)[1]‘);
SELECT @myDoc;
--当前插入的节点为Features中最后一个节点
SET @myDoc.modify(‘
insert <function> people use it as transport</function>
as last into (/Root/ProductDescription/Features)[1]‘);
SELECT @myDoc;
--当前插入的节点放在<ride>标签的后面
SET @myDoc.modify(‘
insert <sport>ride bike is a sport</sport>
after(/Root/ProductDescription/Features/ride)[1]‘);
SELECT @myDoc;
--------------------------------------
/*将多个元素插入到文档中*/
DECLARE @myDoc2 XML
SET @myDoc = ‘<Root>
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features> </Features>
</ProductDescription>
</Root>‘
DECLARE @NewFeatures XML
SET @NewFeatures = N‘<ride>people could ride bike</ride>
<sport>ride bike is a sport</sport>‘

SET @myDoc.modify(‘
insert sql:variable("@NewFeatures")
into (/Root/ProductDescription/Features)[1]‘)
SELECT @myDoc;
------------------------------------
--插入属性到文档中
DECLARE @myDoc xml;
SET @myDoc =
‘<Root>
<Location LocationID="10" >
<step>Manufacturing step 1 at this work center</step>
<step>Manufacturing step 2 at this work center</step>
</Location>
</Root>‘;
--在Location节点中插入一个number属性,其值为5
SET @myDoc.modify(‘
insert attribute number {"5"}
into (/Root/Location[@LocationID=10])[1]‘)
SELECT @myDoc;
--在Location节点中插入一个变量
DECLARE @hour INT
SET @hour = 2;
SET @myDoc.modify(‘
insert attribute hour {sql:variable("@hour")}
into (/Root/Location[@LocationID=10])[1]‘)
SELECT @myDoc;
--------------------------------------------
--向表中类型为XML字段,增加新的节点
IF OBJECT_ID(‘T‘) IS NOT NULL DROP TABLE T
CREATE TABLE T (i int, x xml);
go
INSERT INTO T VALUES(1,‘<Root>
<ProductDescription ProductID="1" ProductName="Road Bike">
<Features>
<Warranty>1 year parts and labor</Warranty>
<Maintenance>3 year parts and labor extended maintenance is available</Maintenance>
</Features>
</ProductDescription>
</Root>‘);
go
UPDATE T
SET x.modify(‘
insert <ride>people could ride bike</ride>
after (/Root/ProductDescription/Features/Maintenance)[1]‘)
SELECT x.query(‘/Root/ProductDescription/Features‘) FROM T
-----------------------------------
--根据if 条件进行插入
DECLARE @myDoc xml;
SET @myDoc =
‘<Root>
<Location LocationID="10" LaborHours="1.2" >
<step>Manufacturing step 1 at this work center</step>
<step>Manufacturing step 2 at this work center</step>
</Location>
</Root>‘;
--满足当前条件添加一个新的hour属性
SET @myDoc.modify(‘
insert
if (/Root/Location[@LocationID=10])
then attribute hour {"5"}
else ()
into (/Root/Location[@LocationID=10])[1]‘)
SELECT @myDoc;
--满足当前条件添加一个新的节点
SET @myDoc.modify(‘
insert
if (count(/Root/Location/step) <= 2)
then element step {"this is new step"}
else ()
as first into (/Root/Location)[1]‘)
SELECT @myDoc;

2、更新XML

DECLARE @myDoc xml
SET @myDoc = ‘<Root>
<Location LocationID="10"
LaborHours="1.1"
MachineHours=".2" >Manufacturing steps are described here.
<step>Manufacturing step 1 at this work center</step>
<step>Manufacturing step 2 at this work center</step>
</Location>
</Root>‘
SELECT @myDoc;
--替换节点Location中LaborHours属性的值为100
SET @myDoc.modify(‘
replace value of (/Root/Location/@LaborHours)[1]
with "100"‘)
SELECT @myDoc;
--使用表更新另一个表中类型为XML的字段的属性
DECLARE @Friend TABLE
(
ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
Friend XML
)
INSERT INTO @Friend SELECT ‘<Friends>
<friend name="junwenli" sex="man" age="23"></friend>
<friend name="jinhanliu" sex="man" age="24"></friend>
<friend name="fangcheng" sex="man" age="23"></friend>
</Friends>‘

DECLARE @Temp TABLE
(
ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
FriendName NVARCHAR(32)
)
INSERT INTO @Temp SELECT ‘GuoHu‘;

UPDATE F
SET Friend.modify(‘replace value of (Friends/friend/@name)[1] with sql:column("T.FriendName")‘)
FROM @Friend F,@Temp T
WHERE F.ID = T.ID;

SELECT Friend FROM @Friend;

3、删除XML

DECLARE @myDoc xml
SET @myDoc = ‘<?Instructions for=TheWC.exe ?>
<Root>
<!-- instructions for the 1st work center -->
<Location LocationID="10"
LaborHours="1.1"
MachineHours=".2" >Some text 1
<step>Manufacturing step 1 at this work center</step>
<step>Manufacturing step 2 at this work center</step>
</Location>
</Root>‘
--删除属性MachineHours
SET @myDoc.modify(‘
delete /Root/Location/@MachineHours
‘)
SELECT @myDoc
--删除第二个step节点
SET @myDoc.modify(‘
delete /Root/Location/step[2]
‘)
SELECT @myDoc

时间: 2024-08-22 14:33:16

sql server 中xml 数据类型的insert、update、delete的相关文章

SQL SERVER中XML查询:FOR XML指定PATH

SQL SERVER中XML查询:FOR XML指定PATH 前言 在SQL SERVER中,XML查询能够指定RAW,AUTO,EXPLICIT,PATH.本文用一些实例介绍SQL SERVER中指定PATH的XML查询. PATH參数 PATH('參数'),參数是用来重命名ROW的,ROW是默认生成的名称. select 'Hui' for xml path  结果:<row>Hui</row> select 'Hui' for xml path ('root') 结果:<

SQL Server中的数据类型

参考 SQL Server 2012编程入门经典(第4版) SQL Server 自带的数据类型 整型: 货币 近似小数 日期/时间 特殊数字 字符 Unicode 二进制 其他 原文地址:https://www.cnblogs.com/dddyyy/p/9350317.html

SQL Server 对XML数据类型的SQL语句总结

--创建XMLTable create table XMLTable(Id int IDENTITY (1, 1) primary key, XMLCol xml); go ---------------------------------------------------------------------------------- --插入XML数据单条 insert into [XML].[dbo].[XMLTable] ([XMLCol]) select * from openrows

SQL Server 中SELECT INTO 和 INSERT INTO SELECT 两种表复制语句

1.INSERT INTO SELECT语句 语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1 要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量. 2.SELECT INTO FROM语句 语句形式为:SELECT vale1, value2 into Table2 from Table1 要求目标表Table2不

SQL系列(十二)—— insert update delete

前言 这个系列的前面都一直在介绍查询select.但是SQL中十分广泛,按对数据的不同处理可以分为: DML:全称Data Manipulation Language,从名字上可以看出,DML是对数据的维护管理语言,主要是处理数据本身: DDL:全称Data Definition Language,同样从名字上可以看出,DDL数据定义语言,主要用来操作库.表.视图.索引等,主要是对数据结构的操作: DCL:全称Data Control Language,从名字可以看出,是数据控制语言,主要用来控

SQL SERVER中对XML进行操作

一.前言 SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象 (BLOB). 用户将一个XML数据存入数据库的时候,可以使用这个XML的字符串,SQL Server会自动的将这个字符串转化为XML类型,并存储到数据库中. 随着SQL Server 对XML字段的支持,相应的,T-

SQL Server中Text和varchar(max)数据类型区别

SQL Server中Text和varchar(max)数据类型区别 以前只知道text和image是可能被SQL Server淘汰的数据类型,但具体原因不太清楚,今天读书的时候发现了text与varchar(max)和nvarchar(max)的区别,主要是对操作符的限制,text只能被下列函数作用: 函数 语句 DATALENGTH READTEXT PATINDEX SET TEXTSIZE SUBSTRING UPDATETEXT TEXTPTR WRITETEXT TEXTVALID

Sql Server中的数据类型和Mysql中的数据类型的对应关系(转)

Sql Server中的数据类型和Mysql中的数据类型的对应关系(转):https://blog.csdn.net/lilong329329/article/details/78899477 一.SQL SERVER与MySQL数据存储的差异 1.SQL SERVER中的datetime,保留到微秒(秒后小数点3位),而mysql仅保留到秒,转换后是否会影响业务,如果影响,需要新增一个字段专门来存储微秒或者毫秒,虽然mysql中没有时间数据类型的精度到达微秒或者毫秒,但是mysql提供对微秒的

SQL Server中易混淆的数据类型

1)char.varchar.text和nchar.nvarchar.ntextchar和varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据.所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度:而变长字符数据则不会以空格填充.text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符. 后面三种数据类型和前面的相比,从名称上看只是多了