任何人都可以解释一旦查询放入视图后查询的功能如何?更具体地说,我注意到,当我运行视图时,我经常会遇到数据类型转换错误,但是当我在视图中运行隔离查询时却不会。例如:
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转换为数字”。有人可以解释当查询存储为导致此错误的视图时对查询的更改吗?
答案 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;
当然,“正确”的方式是将数字数据存储为数字而不是字符串。