【发布时间】:2010-11-17 06:58:26
【问题描述】:
我目前有一个表,其列为varchar。此列可以包含数字或文本。在某些查询中,我将其视为bigint 列(我在它与另一个表中的列bigint 之间进行连接)
只要此字段中只有数字就没有问题,但即使一行有文本而不是此字段中的数字,我也会收到“将数据类型 varchar 转换为 bigint 时出错。”即使在 WHERE 部分我确保没有出现任何文本字段也会出错。
为了解决这个问题,我创建了一个如下视图:
SELECT TOP (100) PERCENT ID, CAST(MyCol AS bigint) AS MyCol
FROM MyTable
WHERE (isnumeric(MyCol) = 1)
但即使视图仅显示具有数值的行并将 Mycol 转换为 bigint,当运行以下查询时,我仍然收到 将数据类型 varchar 转换为 bigint 时出错:
SELECT * FROM MyView where mycol=1
在对视图进行查询时,它不应该知道背后发生了什么!它应该只看到两个 bigint 字段! (see attached image,即使是 mssql 管理工作室也将视图字段显示为 bigint)
【问题讨论】:
-
我个人认为你正在解决错误的问题。如果您将一列用于两种不同的目的,那么您的架构/数据库设计就会出现问题。
-
是的,我知道,但整个系统现在还太远,无法进行重大更改
标签: sql sql-server tsql