Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 仅在其中将varchar转换为数据类型numeric时发生算术溢出错误_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 2008 仅在其中将varchar转换为数据类型numeric时发生算术溢出错误

Sql server 2008 仅在其中将varchar转换为数据类型numeric时发生算术溢出错误,sql-server-2008,tsql,Sql Server 2008,Tsql,我有这个疑问 SELECT CONVERT(NUMERIC(8, 2), ResultLevel), * FROM dbo.DrugTestResult WHERE DrugID = 'THC' AND ISNUMERIC(ResultLevel) = 1 AND (CONVERT(NUMERIC(8, 2), ResultLevel) >= 50 AND CONVERT(NUMERIC(8, 2), Re

我有这个疑问

SELECT  
    CONVERT(NUMERIC(8, 2), ResultLevel),
    *
FROM    
    dbo.DrugTestResult
WHERE   
    DrugID = 'THC'
    AND ISNUMERIC(ResultLevel) = 1
    AND (CONVERT(NUMERIC(8, 2), ResultLevel) >= 50
         AND CONVERT(NUMERIC(8, 2), ResultLevel) <= 99999)
    AND CONVERT(DATE, AuditStamp) > '2014-1-1'
选择
转换(数字(8,2),结果级),
*
从…起
dbo.DrugTestResult
哪里
DrugID='THC'
和ISNUMERIC(ResultLevel)=1
和(转换(数值(8,2),结果级别)>=50
和转换(数字(8,2),结果级)“2014-1-1”
返回此错误

将varchar转换为数据类型numeric时出现算术溢出错误

当我评论where子句的这一部分时

AND ( CONVERT(NUMERIC(8, 2), ResultLevel) >= 50
      AND CONVERT(NUMERIC(8, 2), ResultLevel) <= 99999
    )
和(CONVERT(数值(8,2),ResultLevel)>=50

和CONVERT(NUMERIC(8,2),ResultLevel),因为WHERE子句的不同元素可以按照查询处理引擎认为合适的任何顺序进行计算,因此它可以在计算ISNUMERIC()之前尝试计算CONVERT()。因此,它可以尝试转换无法转换的数据

另一方面,SELECT列表是在WHERE子句之后计算的,因此ISNUMERIC()已删除无法转换的值


为了避免错误,您可以将ISNUMERIC()放在内部派生表中,这样您就只能尝试转换外部WHERE子句中的()数据。

因为WHERE子句的不同元素可以按照查询处理引擎认为合适的任何顺序进行计算,所以它可以尝试计算CONVERT()在计算ISNUMERIC()之前。因此,它可以尝试转换无法转换的数据

另一方面,SELECT列表是在WHERE子句之后计算的,因此ISNUMERIC()已删除无法转换的值


为了避免错误,您可以将ISNUMERIC()放在内部派生表中,这样您就只能尝试转换外部WHERE子句中的()数据。

因为WHERE子句的不同元素可以按照查询处理引擎认为合适的任何顺序进行计算,所以它可以尝试计算CONVERT()在计算ISNUMERIC()之前。因此,它可以尝试转换无法转换的数据

另一方面,SELECT列表是在WHERE子句之后计算的,因此ISNUMERIC()已删除无法转换的值


为了避免错误,您可以将ISNUMERIC()放在内部派生表中,这样您就只能尝试转换外部WHERE子句中的()数据。

因为WHERE子句的不同元素可以按照查询处理引擎认为合适的任何顺序进行计算,所以它可以尝试计算CONVERT()在计算ISNUMERIC()之前。因此,它可以尝试转换无法转换的数据

另一方面,SELECT列表是在WHERE子句之后计算的,因此ISNUMERIC()已删除无法转换的值


为了避免错误,可以将ISNUMERIC()放在内部派生表上,以便只尝试转换()外部WHERE子句中的数字数据。

因为有一个或多个记录无法按请求转换。如果在SSMS中运行查询,它将仅对结果集中显示的那些行执行select子句中的转换,同时对结果集中的所有行执行WHERE子句以确定是哪一行结果集中包含ch行。要测试这一点,您可以执行查询(不带where子句)并向下滚动:一旦到达混乱的行,您将得到转换错误


希望这能回答您的问题并解释该行为。

因为有一条或多条记录无法根据请求进行转换。如果在SSMS中运行查询,它将仅对结果集中显示的那些行执行select子句中的转换,同时对结果集中的所有行执行where子句确定结果集中包括哪些行。要测试这一点,您可以执行查询(不带where子句)并向下滚动:一旦到达混乱的行,您将得到转换错误


希望这能回答您的问题并解释该行为。

因为有一条或多条记录无法根据请求进行转换。如果在SSMS中运行查询,它将仅对结果集中显示的那些行执行select子句中的转换,同时对结果集中的所有行执行where子句确定结果集中包括哪些行。要测试这一点,您可以执行查询(不带where子句)并向下滚动:一旦到达混乱的行,您将得到转换错误


希望这能回答您的问题并解释该行为。

因为有一条或多条记录无法根据请求进行转换。如果在SSMS中运行查询,它将仅对结果集中显示的那些行执行select子句中的转换,同时对结果集中的所有行执行where子句确定结果集中包括哪些行。要测试这一点,您可以执行查询(不带where子句)并向下滚动:一旦到达混乱的行,您将得到转换错误


希望这能回答您的问题并解释这种行为。

可能还需要指出的是,ISNUMERIC确实非常糟糕。对于许多非常松散的数字(例如$1.5、1e4、0x1),它将返回1还可以指出ISNUMERIC非常糟糕。对于很多非常松散的数字(例如$1.5、1e4、0x1)它将返回1。还可以指出ISNUMERIC非常糟糕。对于很多非常松散的数字(例如$1.5、1e4、0x1),它将返回1可能还需要指出的是,ISNUMERIC确实非常糟糕。对于许多非常松散的数字(例如$1.5、1e4、0x1),它将返回1