SQLServer也会欺骗你的眼睛

      大千世界,各种各样的动植物都有与身俱来的伪装术,通过这些伪装术,它们可以

欺骗其他物体的眼睛,有些目的是自卫,而有些则是为了猎食,例如大家熟悉的变色龙,会随着环境的变化而改变其体色的变化,保护自己;有一种食肉植物,会象花瓣一样,张开

其艳丽的身体,吸引蜜蜂蝴蝶的到来,从而将它门吃掉。

 

   言规正转,SQLServer同样可以欺骗你的眼睛,当你用眼睛看着运行结果,张着嘴巴说

“不可能”的时候,其实SQLServer在暗自偷笑,因为它的目的达到了。我们来看这样的

环境,同一个数据库实例,同一个数据库,同一张表,却不同的结果集,下面是2幅截图:

 

图一:

 

 

 

图二:

 

 

从图一中我们得知这样的信息:查询了Test数据库中的T1ID100的数据是有结果的。

从图二中我们却得知,当我更新ID100的纪录时,却提示”0  row(s) affected”,也就是

提示没有符合条件的纪录可以更新,说到这里,网友们肯定会有几个疑问。

 

第一,从图来看,应该是SQLServer 2008的界面,会不会是2008的新特性?关于这个,答案是否定的,在2000的版本下也可以这样。

第二,表上一定有触发器给回滚了,所以结果是这样。对于这点,我想说明的是,此表是一个堆表,上面任何约束和触发器都不存在。

第三,从图来看,两个执行是在同一个窗口,重新打开一个窗口再次执行UPDATE语句,结果也会这样?关于这点,我想说的是,可能是也可能不是。

 

回到前面谈论的伪装,虽然很多动植物都有伪装的本领,但其伪装的科学原理已经被人

门给一一解开了,下面来揭开这一奇妙现象的伪装原理。其实很多网友心中已经有半个答案

了,一定是在执行语句前做了什么设置导致的结果差异。是的,是做了设置,关键是想告诉

大家这个奇特的现象是通过什么设置来实现的。我们先了解FMTONLY这样一个设置,可能

很多网友对此比较陌生,关于这个设置的作用:主要是只将元数据返回给客户端。可以用于测试响应的格式,而不必实际执行查询,默认情况下,此属性是OFF的,下图是将FMTONLY

设置为ON后,查询T1表返回的结果:

 

 

 

   从结果已经看出,数据是没有返回的,到这里,答案已经出来了,是不是设置这个属性

以后,就会出现文章前面提到的欺骗现象,是的,只是我设置完属性以后,把语句给去掉,

欺骗了你,另外,我实际上是在不同的查询窗口做的这样一件事,所以会一边查询有数据,一边却更新没有数据。这里你会否有个疑问?它的作用是返回元数据给客户端,那实际上

是不是已经更新了?关于这个,留给网友回去自己去测试了。

 

    最后,希望网友们喜欢我用这样的方式给大家说明SQLServer里的一些奇妙的现象,也欢迎和大家一起讨论,更欢迎指出文章的不足之处,哪怕是标点符号:)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值