SQL - 运行视图时出错,但在视图中运行查询时不出错

时间:2014-01-11 18:16:22

标签: sql sql-server views

任何人都可以解释一旦查询放入视图后查询的功能如何?更具体地说,我注意到,当我运行视图时,我经常会遇到数据类型转换错误,但是当我在视图中运行隔离查询时却不会。例如:

select 
 cast(id as int(11)) as 'UserID',
 name,
 dob
from myTable

查询运行完全正常。但是,在我将此查询保存为视图后:

create view myView as (
select 
 cast(id as int(11)) as 'UserID',
 name,
 dob
from myTable
)

然后尝试按select * from myView运行视图,通常我会得到转换错误,例如“算术溢出将数据类型varchar转换为数字”。有人可以解释当查询存储为导致此错误的视图时对查询的更改吗?

1 个答案:

答案 0 :(得分:1)

这可能与返回的数据的顺序有关。如果您返回所有行,则您的常规查询可能会遇到错误。您显然在id中有错误的值。解决这个问题的方法是:

select (case when isnumeric(id) and id not like '%.%' then cast(id as int(11)) end) as UserID,
       name,
       dob
from myTable;

当然,“正确”的方式是将数字数据存储为数字而不是字符串。