欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » Sql随手笔记 » 正文

热门阅读

在Sql2005的Where条件中使用函数

创建时间:2011年08月15日 18:40  阅读次数:(5364)
分享到:
今天写了条Sql查询数据,Sql语句如下:
select DID from 
(
select DID from Sys_Dictionary where dbo.fn_IsDate(left(right(DID,11),8))=1
) A
where datediff(d,cast(left(right(A.DID,11),8) as datetime),getdate()) >=0

发现所查询到的结果与自己预想的不一样。很是不解,通过测试各种不同的写法,得到的结果还是与预想的不一样。折腾了一个多小时,终于在Sql中的执行计划中找到了原因。

原来,Sql2005会根据自己的一些规则来优化我们写的Sql语句,在执行计划中可以看到,它是先进行聚集索引的描执行了datediff(d,cast(left(right(A.DID,11),8) as datetime),getdate()) >=0条件,再经过筛选器使用dbo.fn_IsDate(left(right(DID,11),8))=1来筛选,这样,经过SqlServer的优化后,以上Sql的执行顺序完全反了,得到的结查当然就是不一样了。

所以,如果我们要在Where条件中使用函数,请谨慎!
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 83+28=? 的结果(结果是:111)
结  果: