这样的语句为什么能SELECT 但不能Delete纪录

yiyezhiqiu 2005-07-21 02:52:44
delete FROM dbo.ttt
WHERE dbo.ttt.TaskID IN (

Select dbo.Fee_TaskTrace.TaskID From Fee_TaskTrace INNER JOIN Fee_CallLog ON
Fee_CallLog.CallID = Fee_TaskTrace.CallID
where Fee_CallLog.BeginTime > '2005-5-2 23:59:59' AND
Fee_CallLog.CallType = '1'
)
在查询分析器中一直在运行,不能给出结果
SELECT * FROM Fee_DetailBillTemp
WHERE dbo.ttt.TaskID IN (

Select dbo.Fee_TaskTrace.TaskID From Fee_TaskTrace INNER JOIN Fee_CallLog ON
Fee_CallLog.CallID = Fee_TaskTrace.CallID
where Fee_CallLog.BeginTime > '2005-5-2 23:59:59' AND
Fee_CallLog.CallType = '1'
)
但select 马上就能给出结果,ttt表中taskid有重复的,但表中有自增长ID,请大侠们帮忙!

...全文
461 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yiyezhiqiu 2005-08-08
  • 打赏
  • 举报
回复
我现在解决办法用的和flyfing(江山如此多娇) 将的方法差不多!谢谢你们
mandyfan 2005-08-03
  • 打赏
  • 举报
回复
你的视图连接了ttt吗?
flyfing 2005-08-02
  • 打赏
  • 举报
回复
你把:
delete FROM dbo.ttt
WHERE dbo.ttt.TaskID IN (

Select dbo.Fee_TaskTrace.TaskID From Fee_TaskTrace INNER JOIN Fee_CallLog ON
Fee_CallLog.CallID = Fee_TaskTrace.CallID
where Fee_CallLog.BeginTime > '2005-5-2 23:59:59' AND
Fee_CallLog.CallType = '1'
)
拆成:
Select dbo.Fee_TaskTrace.TaskID as tid into #t
From Fee_TaskTrace INNER JOIN Fee_CallLog ON Fee_CallLog.CallID = Fee_TaskTrace.CallID
where Fee_CallLog.BeginTime > '2005-5-2 23:59:59' AND
Fee_CallLog.CallType = '1'

DELETE FROM dbo.ttt WHERE dbo.ttt.TaskID IN(SELECT tid FROM #t)
--DROP TABLE #t
两句话试试呢?
撸大湿 2005-08-01
  • 打赏
  • 举报
回复
不解,顶
Andyxw 2005-08-01
  • 打赏
  • 举报
回复
数据量太大了,删得慢。赖心等等,一般
DELETE比SELECT慢得多。
yiyezhiqiu 2005-07-21
  • 打赏
  • 举报
回复
caoshangfei(草上飞) :你理解错了 我是用下面的语句在查询分析器中运行,不能给出结果 ,一直运行
delete FROM dbo.ttt
WHERE dbo.ttt.TaskID IN (

Select dbo.Fee_TaskTrace.TaskID From Fee_TaskTrace INNER JOIN Fee_CallLog ON
Fee_CallLog.CallID = Fee_TaskTrace.CallID
where Fee_CallLog.BeginTime > '2005-5-2 23:59:59' AND
Fee_CallLog.CallType = '1'
)
手动中止后用
select FROM dbo.ttt
WHERE dbo.ttt.TaskID IN (

Select dbo.Fee_TaskTrace.TaskID From Fee_TaskTrace INNER JOIN Fee_CallLog ON
Fee_CallLog.CallID = Fee_TaskTrace.CallID
where Fee_CallLog.BeginTime > '2005-5-2 23:59:59' AND
Fee_CallLog.CallType = '1'
)

马上就执行完了,两者的差别就是select 和delete ,为什么delete会一直运行呢

seu31199113 2005-07-21
  • 打赏
  • 举报
回复
TaskID重复,不能决定删除哪个,悬而未决, 再加一个条件吧
caoshangfei 2005-07-21
  • 打赏
  • 举报
回复
你的查询和删除是两个不同的进程。你执行删除的时候同时另外一个进程在执行查询,所以会冲突。
yiyezhiqiu 2005-07-21
  • 打赏
  • 举报
回复
SELECT * FROM Fee_DetailBillTemp 写错了 SELECT * FROM ttt
to:mschen(发光的星星) 我执行这个操作时没有用户来查询这个表就我自己在用啊
mschen 2005-07-21
  • 打赏
  • 举报
回复
你在删除表中记录的时候会给表加上一个IX锁,但是如果此时表上已经有一个S琐,也就是此时有用户来查询这个表.就会发生等待,因为IX锁和S锁是不相容的.
MorningTea 2005-07-21
  • 打赏
  • 举报
回复
就是~都不知道ttt是哪里蹦出来的表,与前面from Fee_DetailBillTemp的这个表名不一致
冷箫轻笛 2005-07-21
  • 打赏
  • 举报
回复
SELECT * FROM Fee_DetailBillTemp
WHERE dbo.ttt.TaskID IN (

这句什么意思?
summerICEREDTEA 2005-07-21
  • 打赏
  • 举报
回复
不解
用一个我不了解的词
死锁? hoho
vivianfdlpw 2005-07-21
  • 打赏
  • 举报
回复
有没有死锁?
yiyezhiqiu 2005-07-21
  • 打赏
  • 举报
回复
其中Fee_CallLog和Fee_TaskTrace是视图

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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