设为首页 加入收藏

TOP

SqlServerXML数据类型DML相关操作(图文结合)(二)
2015-11-21 01:57:42 来源: 作者: 【 】 浏览:2
Tags:SqlServerXML 数据 类型 DML 相关 操作 图文 结合
"0.5" }, attribute attrName3 {".2"} ) into (/Record/Exception/Task)[1]'); \

--	插入注释元素(在第3个Address后插入)
UPDATE #XMLTab SET colxml.modify('insert  after (/Record/Exception/Address[3])[1]');
\

--	使用"before"在跟目录前(头部)插入处理指令
UPDATE #XMLTab SET colxml.modify('insert  before (/Record)[1]');
\

--	还可以利用"after" 和 "before" 的方法插入一个元素
UPDATE #XMLTab SET colxml.modify('insert 
after (/Record/Exception/Address[1])[1]'); UPDATE #XMLTab SET colxml.modify('insert
before (/Record/Exception/Address[1])[1]');
\

--	添加删除文本(添加文本后,该元素格式显示成一行)
UPDATE #XMLTab SET colxml.modify('insert text{"Product Catalog Description"} as first into (/Record/Exception)[1]');

--	删除后查看,格式正常
UPDATE #XMLTab SET colxml.modify('delete /Record/Exception/text()');

--	以下为添加后的格式
\

--	按条件更改增加属性:
--如果"/Record/Exception/Address[3]"的属性attrName="attributeB",则增加属性attrName="10",否则增加属性attrName="50"
UPDATE #XMLTab SET colxml.modify('
insert
if (/Record/Exception/Address[3][@attrName="attributeB"])
	then attribute attrName {"10"}
else 
	attribute attrName {"50"}
as first into (/Record/Exception/Address[3])[1] ');
\
--	将元素"9003"中的文本值"9003"改为"10000"()
UPDATE #XMLTab SET colxml.modify('replace value of (/Record/Exception/Error[1]/text())[1] with "10000" ');

--	将元素"Task"的属性"address"的值改为"100"
UPDATE #XMLTab SET colxml.modify('replace value of (/Record/Exception/Task/@address)[1] with "100" ');
UPDATE #XMLTab SET colxml.modify('replace value of (/Record/Exception/Task[1]/@address)[2] with "999" ');
\

--如果/Record/路径下第一个Exception中,元素Address个数大于3,则更新Exception[1]属性type为"10.0"否则为"20.0"
UPDATE #XMLTab SET colxml.modify('
  replace value of (/Record/Exception[1]/@type)[1]
  with (
       if (count(/Record/Exception[1]/Address) > 3) then "10.0"
       else "20.0"
  )');
\

-------------------------------------------------------------------------------------
以下为XML相关查询
-------------------------------------------------------------------------------------

--	查询某个元素中的所有所有子项
SELECT colxml.query('/Record/Exception') FROM #XMLTab

SELECT colxml.query('//Record/Exception/Address') FROM #XMLTab
--图为第二个查询语句的结果
\
--	元素带前缀的查询.之前在临时表插入的第二行数据,现在有用了!~
SELECT colxml.query('
declare namespace p1="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/p1:Record/p1:Exception') 
FROM #XMLTab
\

--	条件查询用,如果在 exist() 方法中指定 true() 或 false() 函数,则总是返回 1
SELECT colxml FROM #XMLTab WHERE colxml.exist('true()')=1
SELECT colxml FROM #XMLTab WHERE colxml.exist('false()')=1


--	查看节点"/Record"的属性"@dt"日期是否为"2015-05-05"
--	元素中的属性转换为日志比较(也可以作为查询条件的判断)
--	参考构造函数:https://msdn.microsoft.com/zh-cn/library/ms189547.aspx
SELECT colxml 
,colxml.exist('/Record[(@dt cast as xs:date?) eq xs:date("2015-05-05")]')
,colxml.exist('/Record[(@dt cast as xs:date?) eq xs:date("2015-05-10")]')
FROM #XMLTab 
\
--	文本判断:"/Record/Exception/Error"中的文本,只要其中一个符合就返回"1"
SELECT colxml 
,colxml.exist('/Record/Exception/Error[(text()[1] cast as xs:string ?) = xs:string("9003") ]')
,colxml.exist('/Record/Exception/Error[(text()[1] cast as xs:string ?) = xs:string("8008") ]')
,colxml.exist('/Record/Exception[1]/Error[(text()[1] cast as xs:string ?) = xs:string("9003") ]')
,colxml.exist('/Record/Except
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇SQLServer唯一键约束和唯一索引有.. 下一篇13-SQLite之groupby

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: