Sql 有没有更好的方法来编写此查询以使第二个条件短路?

Sql 有没有更好的方法来编写此查询以使第二个条件短路?,sql,sql-server,performance,Sql,Sql Server,Performance,下面的查询类似于我的一个查询,它需要将字段强制转换为类型并对其求值,并且我希望忽略包含无法强制转换为目标数据类型的数据的行 select * from MyTable where case when isnumeric(SomeField) = 1 then SomeField else null end > 1 因此,在上面的示例中,我能够测试大于1的值,同时避免转换错误,如果SomeField中有任何非数字字段,则会导致转换错误。我对这个解决方案没意见,但我只是想知道是否有更好的方法

下面的查询类似于我的一个查询,它需要将字段强制转换为类型并对其求值,并且我希望忽略包含无法强制转换为目标数据类型的数据的行

select * from MyTable
where case when isnumeric(SomeField) = 1 then SomeField else null end > 1
因此,在上面的示例中,我能够测试大于1的值,同时避免转换错误,如果SomeField中有任何非数字字段,则会导致转换错误。我对这个解决方案没意见,但我只是想知道是否有更好的方法来实现它?

我在查询中使用where条件得到一个错误“超出了最大整数值”。虽然,我的数据库中有一些非常大的数字,但这对你来说可能不起作用

下面列出了处理大量数据的备选方案:

where isnumeric(SomeField) = 1 and convert(numeric(18,0),SomeField) > 1
isnumeric()检查必须在转换()之前进行


就性能而言,它们大致相同。

我得出的结论是,没有更好的方法可以做到这一点。

您可以控制输入此数据库的数据吗?我只是想知道为什么一开始就要担心数据类型。它是一个从csv文件将数据导入sql表的应用程序。因此,我会根据目标字段的数据类型检查源字段中是否存在任何无效数据(将被截断,数字字段中的字符数据等),并将这些记录放入datagridview中,用户可以在导入之前进行调整。但是,是的,如果我是根据我提供的信息阅读您的回复,我也会对其进行投票:)好吧,我还是会对其进行投票,因为这是常识,但不幸的是,在这种情况下无法应用它。您是否尝试过查看查询分析器的输出?比如:你的意思是得到执行计划?这是100%的表格扫描。性能还可以,但我只是好奇是否有我忽略的内置sql约定,或者更简洁的方法。或者你的意思是为了别的什么?你不能阻止sql在isnumeric()函数之前运行convert()函数,如果它不能转换,那么它将抛出一个错误,这正是我想要避免的。我的数据库中没有任何特别大的数字,但我还是会给你+1,以提醒我注意isnumeric的大小限制。