[怎理]SQL2008、SQL2005型判出
- SQL code
use Tempdbgo--在SQL2005和SQL2008,都出set nocount on ;if object_id('Tempdb..#A') is not null drop table #Acreate table #A( A_ID int not null , Type nvarchar(20))if object_id('Tempdb..#B') is not null drop table #Bcreate table #B( A_ID int not null, Value nvarchar(4000), Num int--意列)insert #A select 1,N'A'insert #A select 2,N'A'insert #B select 3,'Error',0--型非字符/*#A:A_ID Type----------- --------------------1 A2 A#B:A_ID Value Num----------- -------------------- -----------3 Error 0*/--后出出,不成立果集select cast(b.value as bigint) as [后出]from #A a inner join #B b on a.A_Id=b.A_Id/*息 8114, 16, 5,行 28Error converting data type nvarchar to bigint.*/insert #B select 1,10,0--新增一后,影引擎型判以下不goselect cast(b.value as bigint) as [后出]from #A a inner join #B b on a.A_Id=b.A_Id--怎理方法1(用表提示理,改引擎的行序)--LOOP | HASH | MERGE | REMOTE delete #B where isnumeric(Value)=1--除新增select cast(b.value as int) as [后正常]from #A a inner HASH join #B b on a.A_Id=b.A_Idgo--新增20,量型判有影.declare @i intset @i=0while @i<10begin insert #B select 3,'Error'+rtrim(@i),2--型非字符 set @i=@i+1endgo--force order用提示制行序select cast(b.value as int) as [后正常]from #A aCross Apply (select top 1 Value from #B where A_ID=a.A_ID order by Num asc)boption(force order)drop table #a,#b
http://hi.csdn.net/link.php?url=http://blog.csdn.net%2Froy_88%2Farchive%2F2010%2F01%2F04%2F5128737.aspx
[解决办法]
学习
[解决办法]
~~
[解决办法]
[解决办法]
~
[解决办法]
学习.
[解决办法]
.
[解决办法]
学习
[解决办法]
学习
[解决办法]
学习
[解决办法]
学习,不过大版是不是考虑加分呢?
[解决办法]
没看懂
[解决办法]
UP
[解决办法]
.
[解决办法]
学习
[解决办法]
又是sql所谓的优化引起的问题么?
学习。。。
[解决办法]
cast(t.MyVal as decimal(16,2))
运算即可以放在join之前,也可以放在join之後,这个优化器说了算,总之我是不会写类似没有保障的语句~:)
PS:这样给一个固定的逻辑不就可以了吗?
select
cast(b.value as bigint) as [正常]
from #A a
inner join
(
SELECT * FROM #B
WHERE ISNUMERIC(value)=1
) b on a.A_Id=b.A_Id
[解决办法]
学习
[解决办法]
学习学习
[解决办法]
学习
[解决办法]
[解决办法]
学习
[解决办法]
~
[解决办法]
学习啊
[解决办法]
[解决办法]
[怎理]SQL2008、SQL2005型判出
你的主题不是"怎样处理"类型判出错么?
其实我想说的是,为何使用Query hint去干涉SQL优化器的行为,直接给一个固定的语义给它不好吗?
[解决办法]
[解决办法]
学习
[解决办法]
[解决办法]
版版你忒小了~
[解决办法]
语句不变,引擎在不断升级,想把一句话写成永久固定语义比较难吧。
类型判断isdate,isnumeric在复杂的句子里,真正执行的位置经常飘忽不定,
我原来有个解决方案就是,用isnumeric先把正确数据提出来暂存至临时表,以后就用这个临时表了。
用起来感觉还凑合,不用在句子里费劲调整isnumeric的位置,也基本不用担心引擎的升级。
而且执行效率往往不比一个过于复杂的句子低。
[解决办法]
1.同意31楼的看法,不到万不得已不用Query/Table hint
2.遇到过类似情况(转Datetime)
3.
select
CASE WHEN ISNUMERIC(t.MyVal) = 1 THEN cast(t.MyVal as decimal(16,2)) ELSE NULL END
from #A a
cross apply
(
select top 1 b.MyVal from #B b
where b.A_ID=a.AID
order by b.Sort desc
)t
where a.ItemType=0
[解决办法]
水牛帮我看帖
http://topic.csdn.net/u/20091230/15/b44c5a6a-710e-4ca0-a3d4-5856a76025c9.html
[解决办法]
都是课本惹的祸
学了课本上的的标准简洁的SQL
却看不懂专门面向某一数据库的SQL语法
杯具……
[解决办法]
学习
[解决办法]
学习
[解决办法]
为什么hash jion 后在执行上面的 JOIN就正确呢?
[解决办法]
帮你顶一下,顺便学习
[解决办法]
我以前都是先存到临时表 ,特别是较多的T-sql逻辑时。
[解决办法]
学习
看不懂```
[解决办法]
每天学一点SQL知识....时间长了就是积累
[解决办法]
Mark!