sql server中的if语句

sql server中的if语句,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我得到以下错误: Incorrect syntax near 'cast', expected 'AS'. Msg 207, Level 16, State 1, Line 1 Invalid column name 'result'. 在这一行: use SalesDWH go if (select isnumeric(result))=1 begin select max(cast(result) as decimal(10,2)) from testresults end

我得到以下错误:

Incorrect syntax near 'cast', expected 'AS'.
Msg 207, Level 16, State 1, Line 1
Invalid column name 'result'.
在这一行:

  use SalesDWH
go
if (select isnumeric(result))=1
begin
select  max(cast(result) as decimal(10,2)) from testresults 

end
testresults表包含大约2100万行数据

我做错了什么?非常感谢

谢谢大家,rhelp

我已将代码更改为:

 use SalesDWH
    go
    if (select isnumeric(result))=1
    begin
    select  max(cast(result as decimal(10,2))) from testresults

    end
现在我得到了一个错误:

Incorrect syntax near 'cast', expected 'AS'.
Msg 207, Level 16, State 1, Line 1
Invalid column name 'result'.
这绝对是一个有效的列

我接受了克里斯的建议,并做了如下工作:

 use SalesDWH
    go
    SELECT MAX( CAST( [Result] AS DECIMAL(9,2) ) )
FROM [testresults]
WHERE ISNUMERIC( [Result] ) = 1

    and dbo.isReallyNumeric([Result]) = 1 
    and dbo.isReallyInteger([Result]) = 1 
函数在这里

我得到的结果是空的

我需要一个数字结果。我做错了什么

以下是数据示例:

625857  AMPH-AMPHETAMINES   357.1   EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
625858  AMP_C-Amphetamine   NEGATIVE    EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
625859  BARB-BARBITURATES   7.1 EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
625860  BENZ-BENZODIAZEPINES    1.2 EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
625861  COCN-COCAINE METABOLITES    -105.5  EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
625862  CR-CREATININE (CHEMICAL)    57.8    EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
625863  ETOH-ETHANOL    134.5   EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
625864  METAMP_C-Methamphetamine    NEGATIVE    EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
625865  METD-METHADONE  -32.3   EBB74CF9-D12D-4FBC-917F-91D9DAC169F3
谢谢你的帮助。我想我越来越近了:

 select MAX(cast(char_value as decimal(10,2))) from
        (SELECT 
    Char_Number = CASE 
        WHEN id <= 255 THEN RTRIM(id) 
        ELSE '-' END, 
    Char_Value = RTRIM(CASE 
        WHEN id <= 255 THEN CHAR(id) 
        ELSE result END), 
    is_numeric = ISNUMERIC(result), 
    is_really_numeric = dbo.isReallyNumeric(result), 
    is_really_integer = dbo.isReallyInteger(result) 
FROM 
    testresults 
WHERE 
    ISNUMERIC(result) = 1 
    OR dbo.isReallyNumeric(result) = 1 
    OR dbo.isReallyInteger(result) = 1 
 )

    where is_really_numeric=1

根据您对所需内容的猜测进行更新

SELECT MAX( CAST( [Result] AS DECIMAL(10,2) ) )
FROM [testresults]
WHERE ISNUMERIC( [Result] ) = 1;
试试这个

use SalesDWH
go
SELECT MAX(CAST(Result AS DECIMAL(10,2))) FROM testresults WHERE isnumeric(result)=1
但如果结果为空,即使是这样:

and dbo.isReallyNumeric([Result]) = 1 
and dbo.isReallyInteger([Result]) = 1 
那么这可能是实际结果-列中没有任何数字值

列的真正数字值是左或右填充空格等


使用此dbo.isReallyInteger[Result]=1对所有浮点进行条带化,并且表中没有纯整数

如果仍然出现错误,只需为内部表提供一个别名即可

select MAX(cast(char_value as decimal(10,2))) from
        (SELECT 
    Char_Number = CASE 
        WHEN id <= 255 THEN RTRIM(id) 
        ELSE '-' END, 
    Char_Value = RTRIM(CASE 
        WHEN id <= 255 THEN CHAR(id) 
        ELSE result END), 
    is_numeric = ISNUMERIC(result), 
    is_really_numeric = dbo.isReallyNumeric(result), 
    is_really_integer = dbo.isReallyInteger(result) 
FROM 
    testresults 
WHERE 
    ISNUMERIC(result) = 1 
    OR dbo.isReallyNumeric(result) = 1 
    OR dbo.isReallyInteger(result) = 1 
 ) myInnerTable

    where is_really_numeric=1

你有打字错误,那是all@KrisIvanov请检查下面我对您的评论,从最后一个参数改为:A其中A.is\u really\u numeric=1@SqlACID的意思是,您的子选择应该有一个别名,但目前没有。另一方面,你真的应该避免在一篇文章中问如此不同的问题。这不是这个网站的工作方式。它的设计目的是帮助那些立即提出问题的人和那些浏览问题寻找答案的人。在一篇文章中混合不同的问题会使事情变得混乱,因此从长远来看没有多大帮助。将数据类型varchar转换为数字时出错。现在这只取决于您的数据-这是运行时错误,而不是解析时间依赖,可能您有整数和小数部分超过10位的数字?谢谢oleg。我补充了我的问题。请再次检查。我刚刚粘贴了一个数据样本。请检查我的样本。它不清楚-是否有任何空格字符,尝试使用以下方法生成示例:从TestResultError将数据类型varchar转换为numeric时,选择前10名castResult as varbinarymax。很可能您有一些垃圾数据是有效的数字,但不会强制转换,例如符号。、-、^和+,你必须排除这些,这里有一些裁判让你开始,非常感谢,但这看起来很疯狂!我必须这样做才能知道它是否是数字?没有比这更容易的出路了/?克里斯请在一小时后再查一遍