sql难题征解

zyqqzy 2004-07-06 02:04:57
我在使用sql2000的过程中,发现如下几个问题,百思不得其解,现公布如下,诚邀诸位高手解答。
1、在查询分析器中顺序执行很多(几十个)存储时(每个存储大约十分钟到半小时),经常执行到中间某个存储时停止,但查询分析器显示正在执行,而且没有死锁,如果单独执行该存储则正常。
2、曾经遇到这样的事情:在一个存储中创建了一个临时表(大约有30个
字段),参数为@ccuscode(客户编码),if @ccuscode='' then 计算所有客户 else 计算某个客户。 程序中这样设置:if @ccuscode='' set @ccuscode='%'
执行语句:insert into #tmp(f1,...) ....where ccuscode like @ccuscode,
当第一次执行所有客户时,报错临时表缺少字段f1,然后执行单个客户时正常,然后再执行所有客户,则正常。曾经连续碰到3次这种情况,但也不是总出现,偶尔。
3、建立存储,存储中有一变量@c,语句简单如下:
set @c='%1%'
select * from table where f1 like @c
执行上述语句时可能很长时间查不出结果(至少一个小时)
但如果改为:select * from table where f1 like '%'+@c+'%'
执行时只需几秒种。而且此类现象也不是总是发生,偶尔发生,但发生频率较高


我的机器配置如下:
操作系统:win2000server(sp4)
cpu:志强2.0g*4
memory:2g
数据库:sql2000(sp3)


...全文
188 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyqqzy 2004-07-09
  • 打赏
  • 举报
回复
理论上都没问题,可实际上...
zonelive 2004-07-09
  • 打赏
  • 举报
回复
回复:
1、用SQLProfilerTSQL_SPs追查一下存贮过程的执行情况;
2、这样或许好点:
if @ccuscode='' 执行语句:insert into #tmp(f1,...) ....,
else insert into #tmp(f1,...) ....where ccuscode like @ccuscode,

3、
set @c='%1%'
select * from table where f1 like @c
测试10次都正常
fjdelphiboy 2004-07-07
  • 打赏
  • 举报
回复
UP
zonelive 2004-07-07
  • 打赏
  • 举报
回复
如果有环境
或许能帮上你发现点什么
zjcxc 2004-07-06
  • 打赏
  • 举报
回复
1,2的问题很难判断

3.的问题有点像表的索引有问题,或者表自身有问题.
试试用下面的语句在查询分析器中修复一下表和索引:

DBCC CHECKTABLE('table',REPAIR_REBUILD)
DBCC DBREINDEX('table')
zyqqzy 2004-07-06
  • 打赏
  • 举报
回复
每人回答吗

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧