星空网 > 软件开发 > 数据库

xml类型使用注意事项

使用 xquery.exist (有但不仅仅限于)的注意事项。通常使用来判断节点是否存在,值是否存在。常用例子是

DECLARE @ = '<Root>  <ID>1</ID>  <ID>2</ID></Root>'SELECT @.exist('Root/ID[text()=1]')SELECT @.exist('Root/ID[text()=0]')

显然结果就是第一条就是1,第二条语句就是0。这是基本应用,也没有什么问题。

然后我们根据实际情况测试一下。比方说我们使用exist 来配对表里面的值,比如使用以下例子,将包含在

SET NOCOUNT ON;DECLARE @T AS TABLE (Staff NVARCHAR(50),Age INT,PSW VARCHAR(50))INSERT INTO @T    ( Staff, Age, PSW )VALUES ( 'Joe', 30,'JJJJJ' ),    ( 'Mary',25,'KKK')DECLARE @ ='<Staffs>  <Staff>Joe</Staff></Staffs>'SELECT * FROM @TUPDATE a SET PSW = '123456'  FROM @T a  WHERE @.exist('Staffs/Staff[text()=sql:column("a.Staff")]') = 1SELECT * FROM @TStaff                       Age     PSW-------------------------------------------------- ----------- --------------------------------------------------Joe                        30     JJJJJMary                        25     KKKStaff                       Age     PSW-------------------------------------------------- ----------- --------------------------------------------------Joe                        30     123456Mary                        25     KKK

 这样看没有什么问题,因为测试用例都比较规范。但是如果变点花样就不一样了。比如说

SET NOCOUNT ON;DECLARE @T AS TABLE (Staff NCHAR(50), --只是将数据类型从NVarchar(50) 调整为 NChar(50)Age INT,PSW VARCHAR(50))INSERT INTO @T    ( Staff, Age, PSW )VALUES ( 'Joe', 30,'JJJJJ' ),    ( 'Mary',25,'KKK')DECLARE @ ='<Staffs>  <Staff>Joe</Staff></Staffs>'SELECT * FROM @TUPDATE a SET PSW = '123456'  FROM @T a  WHERE @.exist('Staffs/Staff[text()=sql:column("a.Staff")]') = 1SELECT * FROM @T


Staff Age PSW
-------------------------------------------------- ----------- --------------------------------------------------
Joe 30 JJJJJ
Mary 25 KKK

Staff Age PSW
-------------------------------------------------- ----------- --------------------------------------------------
Joe 30 JJJJJ
Mary 25 KKK


 

表里面的数据没有被更改,换句话来说用 xquery.exist 判断不了这种情况。原因好明确,就因为@T里面的Staff 实际上后面带了N多个空格嘛,所以和

如果数据是这样的,不妨改一下方法,也可以实现修改的功能。下面的例子是先把

 

SET NOCOUNT ON;DECLARE @T AS TABLE (Staff NCHAR(50),Age INT,PSW VARCHAR(50))INSERT INTO @T    ( Staff, Age, PSW )VALUES ( 'Joe', 30,'JJJJJ' ),    ( 'Mary',25,'KKK')DECLARE @ ='<Staffs>  <Staff>Joe</Staff></Staffs>'SELECT * FROM @T;WITH CTE AS(  SELECT t.c.value('.[text()]','Nvarchar(50)') Staff    FROM @.nodes('Staffs/Staff') AS t(c))UPDATE a SET PSW = '123456'  FROM @T a  WHERE EXISTS(SELECT * FROM CTE WHERE a.Staff = CTE.Staff)SELECT * FROM @T

 

 

这个例子也告诉我们当遇到有些语句在查询有问题出不来的时候,多一个途径,看下是不是查询的方法和和本身数据是否不符合。也多一种检查的路子。

燃鹅关键还是要多练习一下下 

 




原标题:xml类型使用注意事项

关键词:xml

xml
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

想在下半年玩转跨境电商?你还得具备这些条件!:https://www.ikjzd.com/articles/110969
速看!四大技巧帮你搞定Facebook广告文案!:https://www.ikjzd.com/articles/110970
亚马逊黄金购物车又没了?卖家到底做错了什么?:https://www.ikjzd.com/articles/110971
需求决定市场,如何分析跨境电商市场需求?:https://www.ikjzd.com/articles/110972
做好shopee促销,双十二我们需要注意的点在哪里?:https://www.ikjzd.com/articles/110973
如何快速找到亚马逊差评订单号?:https://www.ikjzd.com/articles/110974
浏阳市里面哪里好玩的地方 浏阳市内有什么好玩的地方:https://www.vstour.cn/a/404233.html
你心目中的十大旅游景点有哪些?:https://www.vstour.cn/a/404234.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流