SQL查询-选择除列中的值以402、403或A40开头以外的所有行

SQL查询-选择除列中的值以402、403或A40开头以外的所有行,sql,select,Sql,Select,我有一个MS SQL视图,无法控制,它还可以查询其他几个我也无法控制但必须使用的SQL视图 基于导频值获取所有行,但以402、403或A40开头的行除外。这是当前的查询,只要所有引导项都可以解释为INT,它就可以正常工作 从sqlsrvlink.DATABASE.dbo.V_PILOT_GENERAL中选择*而不是LEFTpilot,在'402'和'403'中选择3 pilot应该始终是INT,但是SQL设计留下了很多需要改进的地方,并作为VARCHAR实现。因此,对于没有输入格式检查的第三方应

我有一个MS SQL视图,无法控制,它还可以查询其他几个我也无法控制但必须使用的SQL视图

基于导频值获取所有行,但以402、403或A40开头的行除外。这是当前的查询,只要所有引导项都可以解释为INT,它就可以正常工作

从sqlsrvlink.DATABASE.dbo.V_PILOT_GENERAL中选择*而不是LEFTpilot,在'402'和'403'中选择3

pilot应该始终是INT,但是SQL设计留下了很多需要改进的地方,并作为VARCHAR实现。因此,对于没有输入格式检查的第三方应用程序,可以“配置”先导列以不包含任何数值,在这种情况下,我的SELECT语句失败并显示错误消息:

Msg 245,16级,状态1,第1行 将varchar值“A406XX”转换为数据类型为int的列时出现语法错误

如何扩展SELECT以排除A40,但主要通过排除或直接忽略非数值来解决“将VARCHAR转换为INT的错误”

SELECT * from sqlsrvlink.DATABASE.dbo.V_PILOT_GENERAL
WHERE pilot NOT LIKE '402%' AND pilot NOT LIKE '403%' AND pilot NOT LIKE 'A40%'
也应该更好地利用飞行员的任何指标

编辑

根据你的评论,我想我最初误解了这个问题。问题不在于SELECT语句本身,而在于当基表中存在无效数据时,任何试图访问违规行中该列的行为都会导致如下错误

CREATE VIEW [dbo].[testing] 
AS
SELECT 1 AS [Number]
      ,'X' AS Letter
  union all
SELECT 'bob' AS [Number]
      ,'Y' AS Letter
  union all
SELECT 3 AS [Number]
      ,'Z' AS Letter
GO

SELECT * /*Works*/
FROM  [dbo].[testing] 
WHERE Letter IN ('X', 'Z')

SELECT CAST([Number] AS varchar(10)) /*Error Occurs*/
FROM  [dbo].[testing] 

我不知道有什么方法可以避免这种情况,而不更改您所说的无法执行的视图定义,或者更改基础数据,或者重写查询以不使用视图。您将无法对该列进行筛选以删除不可靠的记录,因为尝试在筛选中使用该列只会导致错误发生。

这可能没问题。我想你的“不”字偏左了一点

SELECT *
    FROM sqlsrvlink.DATABASE.dbo.V_PILOT_GENERAL
    WHERE LEFT(pilot,3) NOT IN ('402','403', 'A40');

像这样的怎么样?这适用于字符串/文本字段。
从sqlsrvlink.DATABASE.dbo.V_PILOT_GENERAL中选择*PILOT,其中PILOT不喜欢402%或…

这将正常工作,不幸的是错误消息仍然出现,查询停止。编辑后。是的,你说得很对,我会走很长的路去争取改变原来的观点,谢谢。