在论坛中出现的各种疑难问题:各种问题


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


在论坛中出现的各种疑难问题:各种问题

上一篇:uva 668 - Parliament(贪心)


下一篇:Delphi获取文件名、不带扩展名文件名、文件所在路径、上级文件夹路径的方法