将表中某列的所有浮点值相乘,如果某个值为null、负值或非数字,则在SQL server 2008 R2中引发错误

将表中某列的所有浮点值相乘,如果某个值为null、负值或非数字,则在SQL server 2008 R2中引发错误,sql,sql-server,sql-server-2008,windows-7,Sql,Sql Server,Sql Server 2008,Windows 7,如果列值为正值,我需要将表中一列的所有浮点值相乘。 如果我发现一个值为null或负值或不是数字,我会在SQLServer2008R2中引发一个错误 给定表t0: col 1.5 2 给定表t1: col 2 -1 5 0 null NaN 对于t0,我应该得到3,对于t1,我应该提出一个错误 DECLARE @ta float SELECT CASE @float when tableNa

如果列值为正值,我需要将表中一列的所有浮点值相乘。 如果我发现一个值为null或负值或不是数字,我会在SQLServer2008R2中引发一个错误

给定表t0:

   col
   1.5 
    2 
给定表t1:

    col
     2
    -1
     5
     0
    null
    NaN
对于t0,我应该得到3,对于t1,我应该提出一个错误

  DECLARE @ta float
  SELECT CASE @float 
    when tableName.col <= 0 then raiseError
    when tableName.factor IS NULL  then raiseError
    ELSE multiply(tableName.col)
    END
FROM tableName
我知道我可以使用EXPSUMLOGISNLL,但对于浮点计算来说,它效率不高。有没有更有效的方法


任何帮助都将不胜感激

既然可以存储NaN,那么您使用的是哪种字段类型?@Joachim Isaksson10,因为该表是由其他人提供的,所以我认为该值可能会出错。我需要考虑所有角落的情况。
DECLARE @Col DECIMAL(18,2),
    @Result DECIMAL(18,2) = 1

DECLARE X CURSOR FOR
SELECT Col 
FROM YourTable
OPEN X
FETCH NEXT FROM X INTO @Col
WHILE @@FETCH_STATUS=0 BEGIN
    IF (@Col<=0)RAISERROR('Your Message',16,1)
    IF (@Col IS NULL )RAISERROR('Your Message',16,1)
    -- Your Condition
    SET @Result = @Result*@Col
    FETCH NEXT FROM X INTO @Col
END
CLOSE X
DEALLOCATE X


PRINT @Result