积极答复者
奇怪的错误,不是where再取数据(cast(Keys as int))吗?

问题
-
begin tran
create table #A(AId int,ItemType int)
create table #B(A_Id int,Keys varchar(200))
insert #A
select 1,3 union all select 2,1 union all select 3,1 union all select 4,1insert #B
select 1,'转换'select Keys
from #A a join #B b on a.AId=b.A_Id
where a.ItemType=1--没有结果
select cast(Keys as int)
from #A a join #B b on a.AId=b.A_Id
where a.ItemType=1
drop table #A
drop table #B
rollback--奇怪的错误,不是where再取数据(cast(Keys as int))吗?ItemType=1时,并没有结果却执行了cast(Keys as int)
,ItemType=3时,Keys才等于'转换'呀。
--不是先where再cast(Keys as int)吗,这里好似是相反呢?
消息 245,级别 16,状态 1,第 10 行
在将 varchar 值 '转换' 转换成数据类型 int 时失败。- 已编辑 SQL STUDIO 2009年12月4日 4:01
答案
-
查询优化器决定执行的顺序, 则不是按照我们理解的顺序
你可以手工控制一下执行计划, 就不报错了
select cast(Keys as int) from #A a join #B b on a.AId=b.A_Id where a.ItemType=1 option( force order )
- 已标记为答案 SQL STUDIO 2009年12月4日 6:18
-
加個表提示,改變數據庫引擎的執行順序就行了{ LOOP | HASH | MERGE | REMOTE }
如:
select cast(Keys as int) from #A a inner HASH join #B b on a.AId=b.A_Id where a.ItemType=1 select cast(Keys as int) from #A a inner MERGE join #B b on a.AId=b.A_Id where a.ItemType=1
ROY WU(吳熹 )- 已标记为答案 SQL STUDIO 2009年12月4日 6:18
全部回复
-
查询优化器决定执行的顺序, 则不是按照我们理解的顺序
你可以手工控制一下执行计划, 就不报错了
select cast(Keys as int) from #A a join #B b on a.AId=b.A_Id where a.ItemType=1 option( force order )
- 已标记为答案 SQL STUDIO 2009年12月4日 6:18
-
加個表提示,改變數據庫引擎的執行順序就行了{ LOOP | HASH | MERGE | REMOTE }
如:
select cast(Keys as int) from #A a inner HASH join #B b on a.AId=b.A_Id where a.ItemType=1 select cast(Keys as int) from #A a inner MERGE join #B b on a.AId=b.A_Id where a.ItemType=1
ROY WU(吳熹 )- 已标记为答案 SQL STUDIO 2009年12月4日 6:18