避免在计算列中被零除错误

akh*_*hil 8 sql-server sql-server-2008-r2 computed-column

在下表中,您如何避免除以零错误?

CREATE TABLE [dbo].[TblDivision]
(
    [Numerator] int NOT NULL,
    [Denominator] int NOT NULL,
    [Result] AS (Numerator/ Denominator)
)
GO
Insert into (Numerator, Denominator) TblDivision values (3,0)
GO
Run Code Online (Sandbox Code Playgroud)

Phi*_*lᵀᴹ 12

只需添加一个除以 0 的特殊情况:

CREATE TABLE [dbo].[TblDivision]
  (
  [Numerator] int NOT NULL,
  [Denominator] int NOT NULL,
  [Result] AS case when Denominator=0 then 0 else (Numerator/ Denominator) end
  );
Run Code Online (Sandbox Code Playgroud)

  • 或者,如果 NULL 不是读取该列的代码的问题,则可能返回 NULL 而不是 0,因为除以零的结果不是真正的 0,除非分子为 0。 (4认同)
  • 是的,老实说,留给 OP 练习。已回答避免错误:) (3认同)

Len*_*art 10

类似于@Phil 的解决方案:

CREATE TABLE dbo.TblDivision
(    Numerator int NOT NULL
,    Denominator int NOT NULL
,    Result AS Numerator / nullif(Denominator,0)
);
Run Code Online (Sandbox Code Playgroud)

如果分母为 0,则它通过 nullif 映射到 null。由于除以 null 的任何内容都是 null,因此在这种情况下结果变为 null。