1、sql2008碰到一个奇怪问题,大家有没有碰到过啊
http://bbs.csdn.net/topics/390692705
同一个存储过程,从sqlserver profiler里监视,看到的语句执行时间是20秒以上,从监视器里把语句copy到查询分析器里执行,也就一两秒钟就能执行完毕。
请问这是神马情况,试了好多次都是这样。
这样直接导致程序超时异常,有人碰到过这种情况吗?
不是拷贝存储过程里的语句,是拷贝的profiler里监视到的语句
是profile里监视到得程序调用的,duration是23秒多。
楼主的解决方法:找到问题了,sql日志太大引起的,清理一下日志,查询耗时都变成1秒不到了,不过也不算大啊,才900多M...
2、SQL锁问题
我有一个需求。数据库中有一个职工表,其中有个int型的ID字段。在程序中添加员工时,要点击‘检测ID’按钮获取数据中最大的ID并加一形成最新的ID。
列子:假设数据库中职工表的最大ID为135,那么我点击‘检测ID’按钮之后得到的新ID就是136。
但是问题就出现了,假设多个人同时点击‘检测ID‘按钮,获得的最新ID都是一样的。
列子:假设数据库中职工表的最大ID为135,那么多人同时点击‘检测ID’按钮之后得到的新ID都是136。
我想要的效果是在甲点击‘检测ID’获取到新ID之后,后面的用户就无法获取到最新ID。要等甲完成新增操作之后,后面的用户才能获取到最新的ID。
请问能否用SQL中的锁之类的方法解决这个问题,或者说其他什么方法。
我的建议:
create table tb_id(tb_name varchar(100),currval int,status int) insert into tb_id values(‘xxx‘,1,0) go begin tran declare @currval int update tb_id set status = 1, @currval = currval+1, currval = currval + 1 where status = 0 and tb_name = ‘xxx‘ --select @currval --使用id insert into xxx values(@currval) update tb_id set status = 0, where status = 1 and tb_name = ‘xxx‘ commit tran