CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

为什么这个sql语句执行不了?请帮帮忙

楼主freegoal(呵呵)2005-08-04 12:53:09 在 MS-SQL Server / 应用实例 提问

在Query   Analyzer中,如果sql语句为  
  select   *   from   dbo.vw_binhistoryForYield   a   left   join   dbo.vw_pumporiginalgn   b   on   a.lot_no=b.containername  
  where   a.binh_bin_datetime   between   '2005-8-3'   and   '2005-8-4'  
  则只需要两分钟左右就出结果。  
   
  如果sql语句为  
  select   *   from   dbo.vw_binhistoryForYield   a   left   join   dbo.vw_pumporiginalgn   b   on   a.lot_no=b.containername  
  where   a.binh_bin_datetime   between   '2005-8-3   15:00'   and   '2005-8-4'  
  则需要两个钟头左右才出结果。  
   
  如果sql语句为  
  select   *   from   dbo.vw_binhistoryForYield   a   left   join   dbo.vw_pumporiginalgn   b   on   a.lot_no=b.containername  
  where   a.binh_bin_datetime   between   '2005-8-3'   and   '2005-8-3   12:00'  
  则根本就执行不了,出现提示说:  
  “Server:   Msg   1101,   Level   17,   State   10,   Line   1  
  Could   not   allocate   new   page   for   database   'TEMPDB'.   There   are   no   more   pages   available   in   filegroup   DEFAULT.   Space   can   be   created   by   dropping   objects,   adding   additional   files,   or   allowing   file   growth.”。  
   
   
  请问这是怎么回事?谁能帮我解释一下。谢谢 问题点数:100、回复次数:11Top

1 楼lys1706228(今年的第一个收获(事事变化莫测,福兮祸兮!淡然面对))回复于 2005-08-04 12:58:48 得分 20

1.     between   '2005-8-3'   and   '2005-8-4'   这个比较单位是   天  
  2.     between   '2005-8-3   15:00'   and   '2005-8-4'   这个比较单位是   分  
  3.     between   '2005-8-3'   and   '2005-8-3   12:00'   这个范围有冲突  
   
  说的不一定对哦Top

2 楼zjcxc(邹建)回复于 2005-08-04 13:01:50 得分 40

1.   将上述3句复制到查询分析器,按   Ctrl+L   ,看看3句的执行计划是否一致?  
   
  2.   检查是否数据有问题,执行下面的语句,如果有错误,则根据对应的提示进行处理:  
        dbcc   checktable('dbo.vw_binhistoryForYield')  
        dbcc   checktable('dbo.vw_pumporiginalgn')  
   
  3.   检查是否索引或者统计的问题,执行下面的语句重建两个表的所有索引:  
        dbcc   DBREINDEX('dbo.vw_binhistoryForYield')  
        dbcc   DBREINDEX('dbo.vw_pumporiginalgn')  
   
  4.   如果还有问题,将查询语句中的两个表导到一个新的数据库中测试上述语句.Top

3 楼hsj20041004(光芒)回复于 2005-08-04 13:03:14 得分 20

where   test_expression   between   begin_expression   and   end_expression  
  end_expression   必须与   test_expression   和   begin_expression   一样具有相同的数据类型  
  你的上面一个是Date   一个是DateTime  
  应该是要么是Date   ,要么是DateTime  
   
  Top

4 楼phantomMan()回复于 2005-08-04 14:11:52 得分 10

把   a.binh_bin_datetime   between   '2005-8-3   15:00'   and   '2005-8-4'   换成    
   
  a.binh_bin_datetime   >   '2005-8-3   15:00'     and   a.binh_bin_datetime   <   '2005-8-4'   看看Top

5 楼summerICEREDTEA(从基础学起)回复于 2005-08-04 15:22:52 得分 5

mark  
  学习来的Top

6 楼zengzhengliang(啊牛)回复于 2005-08-04 15:39:34 得分 5

强烈支持Top

7 楼freegoal(呵呵)回复于 2005-08-04 17:03:48 得分 0

谢谢大家的回复,但问题还是没有搞明白。  
   
  先说明一点,dbo.vw_binhistoryForYield   和   dbo.vw_pumporiginalgn   都是View,不是表  
   
  我有试了两种情况:  
  1,sql为   select   *   from   dbo.vw_binhistoryForYield   a   left   join   dbo.vw_pumporiginalgn   b   on   a.lot_no=b.containername  
  where   a.binh_bin_datetime   between   '2005-8-2   00:00'   and   '2005-8-3   12:00'  
    此时,5分多钟出结果  
   
  2,sql为   select   *   from   dbo.vw_binhistoryForYield   a   left   join   dbo.vw_pumporiginalgn   b   on   a.lot_no=b.containername  
  where   a.binh_bin_datetime   between   '2005-8-3   00:00'   and   '2005-8-3   12:00'  
    此时,也是执行不了,同样出现提示说:  
  “Server:   Msg   1101,   Level   17,   State   10,   Line   1  
  Could   not   allocate   new   page   for   database   'TEMPDB'.   There   are   no   more   pages   available   in   filegroup   DEFAULT.   Space   can   be   created   by   dropping   objects,   adding   additional   files,   or   allowing   file   growth.”。  
   
  希望大家继续给我意见,谢谢!Top

8 楼freegoal(呵呵)回复于 2005-08-04 17:13:51 得分 0

好象如果时间范围设在同一天,就会执行不了。  
   
  如果范围设在不同日期,但是包含小时分钟,能执行,但非常慢  
  Top

9 楼zjcxc(邹建)回复于 2005-08-04 17:13:54 得分 0

做一下我列出的检查Top

10 楼freegoal(呵呵)回复于 2005-08-04 17:19:56 得分 0

to   zjcxc(邹建)   ,谢谢你的建议:  
  1,   执行计划确实不一致,如果时间范围中包含小时分钟,则会存在一个table   spool/lazy   spool.  
   
  2,我用dbcc   checkview,他告诉我没权限,我不是管理员。  
   
  3,我也没做,如果做会不会影响数据库的运行(其它用户需要用数据库)。另外我可能也没权限  
   
  4,做起来比较困难,数据量大Top

11 楼zjcxc(邹建)回复于 2005-08-04 17:38:09 得分 0

估计是索引或者统计有点问题.  
   
  如果不能做检查的话,那帮不上什么忙了.Top

相关问题

  • sql语句执行为什么报错
  • 为什么象这样的SQL语句ACCESS都无法执行?
  • 动态sql语句,用execute immediate 执行,为什么出错?
  • 来看看,这个SQL语句为什么不能执行(SQLServer2000)
  • 以下SQL语句为什么执行很慢
  • 为什么这个语句不能在SQL server执行
  • 为什么不能一次执行多条sql语句?
  • 怎样执行sql语句?
  • sql语句执行问题
  • 如何执行SQL语句

关键词

  • 语句
  • 执行
  • sql
  • vw
  • binh
  • binhistoryforyield
  • pumporiginalgn
  • containernamewhere
  • dbo
  • datetime

得分解答快速导航

  • 帖主:freegoal
  • lys1706228
  • zjcxc
  • hsj20041004
  • phantomMan
  • summerICEREDTEA
  • zengzhengliang

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo