在Sql2005的Where前提中利用函数
你看出了作者的深度?深处半米!当初是冲那么多的大牛给他写序才买的,后来才发现无啥内容,作者也只是才用几年的新手,百花了几十两银子,再次感叹当今社会的虚伪与浮躁明天写了条Sql查询数据,Sql语句以下:selectDIDfrom
(
selectDIDfromSys_Dictionarywheredbo.fn_IsDate(left(right(DID,11),8))=1
)A
wheredatediff(d,cast(left(right(A.DID,11),8)asdatetime),getdate())>=0
发明所查询到的了局与本人料想的纷歧样。非常不解,经由过程测试各类分歧的写法,失掉的了局仍是与料想的纷歧样。折腾了一个多小时,终究在Sql中的实行企图中找到了缘故原由。
本来,Sql2005会依据本人的一些划定规矩来优化我们写的Sql语句,在实行企图中能够看到,它是先辈行会萃索引的描实行了datediff(d,cast(left(right(A.DID,11),8)asdatetime),getdate())>=0前提,再经由选择器利用dbo.fn_IsDate(left(right(DID,11),8))=1来选择,如许,经由SqlServer的优化后,以上Sql的实行按次完整反了,失掉的结查固然就是纷歧样了。
以是,假如我们要在Where前提中利用函数,请审慎!上面我们说了DML的闪回方案。但对于DDL却无能为力,对于大多数的DDL,即使是rowbase格式,二进制日志binlog中仍只记录语句本身。对于删表操作,只记录一个语句droptablet。仅凭这句话,无法还原表的数据。 对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。 如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录. 不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理? 记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。 作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题! 多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油 学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了! 财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的.. 大家注意一点。如下面的例子:
页:
[1]