【发布时间】:2010-07-13 08:57:44
【问题描述】:
我有一个无法控制的 (MS) SQL VIEW,它还查询其他几个我也无法控制但必须使用的 SQL VIEW。
根据“试验”值获取所有行,但以 402 或 403 或 A40 开头的行除外。只要所有“试点”条目都可以解释为 INT,这就是当前运行良好的查询。
SELECT * from sqlsrvlink.DATABASE.dbo.V_PILOT_GENERAL WHERE NOT LEFT(pilot,3) IN ('402','403')
pilot 应该始终是一个 INT,但 SQL 设计还有很多不足之处,它被实现为一个 VARCHAR。因此,对于没有输入格式检查的 3:rd 方应用程序,可以“配置”“pilot”列以不包含任何数值,在这种情况下,我的 SELECT 语句将失败并显示错误消息:
消息 245,第 16 级,状态 1,第 1 行 将 varchar 值“A406XX”转换为数据类型为 int 的列时出现语法错误。
如何扩展 SELECT 以排除 A40,但主要通过排除或直接忽略它们(无数值)来解决“将 VARCHAR 转换为 INT 的错误”。
【问题讨论】: