为什么这个sql语句执行不了?请帮帮忙
在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




