ehxz 发表于 2008-2-2 18:45:49

SQL2000存储过程里里不同表间CHAR与INT的转换

Q:在第一个表里存储是用的CHAR的,同样的数据要转到第二个表里的INT里,原来的数据一般也是不会出错的,都是以文本形式的数字,但有时候会有一些垃圾数据出来,比如全角数字之类的,这样在插入的时候会出错,过程中断。
至于前面的判断修改已经不可能了,只能想办法在这个存储过程里处理。原来的垃圾程序,现在能维护的就这些了。
SQL类似于:
insert   into   a(id)       --ID为INT类型
select   b.id                   --ID为CHAR类型
from   b
偶想要出错就忽略过去,如何处理?
谢谢!!
insert into a(id)
select b.id
from b
where isnumeric(id)= 1

insert   into   a(id)       --ID为INT类型
select   case when isnumeric(b.id)=1 then cast(b.id as int) else null end                   --ID为CHAR类型
from   b

declare @ta table(id int)
declare @tb table(id varchar(5))
insert @tb select 'af' --英文
insert @tb select '12' --全角
insert @tb select '1a s' --混合
insert @tb select '12 21' --中间空格
insert @tb select '12221' --正确
insert @tb select '1232 ' --后有空格
insert @tb select ' 2421' --前有空格
insert @tb select '02421' --前有0

insert into @ta(id)
select b.id
from @tb b
where isnumeric(id)= 1
select * from @ta
/*

id         
-----------
12221
1232
2421
2421

(所影响的行数为 1 行)


*/
页: [1]
查看完整版本: SQL2000存储过程里里不同表间CHAR与INT的转换