将表中某列的所有浮点值相乘,如果某个值为null、负值或非数字,则在SQL server 2008 R2中引发错误
如果列值为正值,我需要将表中一列的所有浮点值相乘。 如果我发现一个值为null或负值或不是数字,我会在SQLServer2008R2中引发一个错误 给定表t0:将表中某列的所有浮点值相乘,如果某个值为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
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