相关疑难解决方法(0)

尽管没有列包含0,但TSQL除以零

我一直试图理解为什么我的SQL查询得到了"除以零"(Msg 8134),但我必须遗漏一些东西.我想知道为什么对于下面的具体情况,我不是在寻找NULLIF,CASE WHEN...或者与我已经了解的相似(当然可以在下面的情况下使用它们).

我有一个SQL语句与计算列类似

SELECT
    TotalSize,
    FreeSpace,
    (FreeSpace / TotalSize * 100)
FROM
    tblComputer
...[ couple of joins ]...
WHERE
    SomeCondition = SomeValue
Run Code Online (Sandbox Code Playgroud)

使用上面提到的错误消息运行此语句错误,这本身不是问题 - 显然TotalSize可能是0并因此导致错误.

现在我不明白的是,TotalSize当我将计算列注释掉时,我没有任何列为0的行,我仔细检查过不是这种情况.

然后我认为由于某种原因,在使用where子句的条件进行实际过滤之前,将对整个结果集执行列计算,但是这个a)在imho和b)尝试使用a重现错误时没有意义测试设置一切正常(见下文):

INSERT INTO tblComputer (ComputerName, IsServer) VALUES ('PC0001',1)
INSERT INTO tblComputer (ComputerName, IsServer) VALUES ('PC0002',1)
INSERT INTO tblComputer (ComputerName, IsServer) VALUES ('PC0003',1)
INSERT INTO tblComputer (ComputerName, IsServer) VALUES ('PC0004',0)
INSERT INTO tblComputer (ComputerName, IsServer) VALUES ('PC0005',1)
INSERT …
Run Code Online (Sandbox Code Playgroud)

t-sql calculated-columns divide-by-zero

10
推荐指数
1
解决办法
3943
查看次数

SQL IsNumeric无法正常工作

保留列是一个varchar,对它执行求和我想将它转换为deciaml.但是下面的SQL给了我一个错误

select
cast(Reserve as decimal)
from MyReserves
Run Code Online (Sandbox Code Playgroud)

将数据类型varchar转换为数字时出错.

我添加了isnumeric而不是null来尝试避免这个错误,但它仍然存在,任何想法为什么?

select
cast(Reserve as decimal)
from MyReserves
where isnumeric(Reserve ) = 1
and MyReserves is not null
Run Code Online (Sandbox Code Playgroud)

sql sql-server

7
推荐指数
3
解决办法
2万
查看次数