Sql Server执行过程求教

Sql Server执行过程求教

问题描述:

SQL SERVER
TABLE_A
Col_ID varchar

10002

34

01

abcde

前期设计和后期需求有偏差。现在想寻找COL_ID是数字的且有数字范围参数的字段

SQL_1:
SELECT CONVERT(INT,Col_ID) COL_ID_NUM, Col_ID FROM TABLE_A WHERE ISNUMERIC(Col_ID)=1
这条语句是没有问题可以执行。

SQL_2:
SELECT * FROM (SELECT CONVERT(INT,Col_ID) COL_ID_NUM,Col_ID FROM TABLE_A WHERE ISNUMERIC(Col_ID)=1 ) A
WHERE A.COL_ID_NUM >2
这条语句就报错了,说 字段COD_ID中abcde转换成INT错误。

按照我的理解SQL_2中
先执行SELECT CONVERT(INT,Col_ID) COL_ID_NUM, Col_ID FROM TABLE_A WHERE ISNUMERIC(Col_ID)=1 并生成临时表V1,然后在V1中执行COL_ID_NUM >2。这样应该已经把COL_ID=abcde删除掉了。

请大牛指点。谢谢

按道理就是你理解的那样呀,应该是先执行子查询再去做>2的筛选。。。
如果你的SQL_1确实没错,那你不妨改成这样不用子查询:
[code="sql"]
SELECT CONVERT(INT, Col_ID) COL_ID_NUM, Col_ID
FROM TABLE_A
WHERE ISNUMERIC(Col_ID) = 1
and CONVERT(INT, Col_ID) > 2
[/code]