使用带有ISNUMERIC的派生表进行查询会导致转换失败(varchar为int)

Mik*_*keM 2 t-sql derived-table isnumeric sql-server-2008

这是一个示例查询:

DECLARE @table table (loc varchar(10))

INSERT INTO @table VALUES
('134a'), ('123'), ('abc'), ('124')

SELECT * 
FROM (
    SELECT * FROM @table WHERE ISNUMERIC(loc) = 1
) as a
WHERE CAST(loc as INT) BETWEEN 100 AND 200
Run Code Online (Sandbox Code Playgroud)

如果我有一些varchar值,并且我ISNUMERIC在查询中的派生表中使用它们将它们限制为数值,为什么会导致转换错误?:

将varchar值'134a'转换为数据类型int时转换失败.

有没有解决的办法?

HAB*_*ABO 5

WHERE子句首先执行.尝试:

DECLARE @table table (loc varchar(10)) 

INSERT INTO @table VALUES 
('134a'), ('123'), ('abc'), ('124') 

SELECT *  
FROM ( 
    SELECT * FROM @table
) as a 
WHERE ISNUMERIC(loc) = 1 and CAST(loc as INT) BETWEEN 100 AND 200 
Run Code Online (Sandbox Code Playgroud)