莫相离 发表于 2015-1-16 14:18:46

在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。仅凭这句话,无法还原表的数据。

蒙在股里 发表于 2015-1-18 12:47:24

对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。

第二个灵魂 发表于 2015-1-23 06:06:19

如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录.

金色的骷髅 发表于 2015-1-31 15:31:55

不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?

再现理想 发表于 2015-2-6 20:44:33

记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。

因胸联盟 发表于 2015-2-18 18:27:12

作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!

飘灵儿 发表于 2015-3-6 09:11:26

多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油

柔情似水 发表于 2015-3-13 00:08:19

学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!

再见西城 发表于 2015-3-13 00:08:23

财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..

海妖 发表于 2015-3-20 07:01:45

大家注意一点。如下面的例子:
页: [1]
查看完整版本: 在Sql2005的Where前提中利用函数