两次查询的结果应该相同。相同的数据。同样的公式。同样的 Actor 阵容。一个结果是针对表变量在查询中计算的,而第二个结果是针对变量计算的。我已经用临时表和永久表替换了表变量,结果相同。

为什么我的结果不一样?

DECLARE
    @comm DECIMAL(20 , 6)
  , @quantity INT
  , @multiplier INT
  , @price DECIMAL(38 , 10)

SET @comm = 210519.749988;
SET @quantity = 360000;
SET @multiplier = 1;
SET @price = 167.0791666666;

DECLARE @t AS TABLE
    (
      [comm] [decimal](38 , 6)
    , [multiplier] [int]
    , [Quantity] [int]
    , [Price] [decimal](38 , 10)
    )

INSERT INTO @t
    VALUES
        ( @comm , @quantity , @multiplier , @price )

SELECT
        @comm = comm
      , @quantity = quantity
      , @multiplier = multiplier
      , @price = price
    FROM
        @t

SELECT
        CAST(comm / quantity / multiplier / price AS DECIMAL(32 , 10))
    FROM
        @t
UNION ALL
SELECT
        CAST(@comm / @quantity / @multiplier / @price AS DECIMAL(32 , 10));

结果
1. 0.0034990000
2. 0.0035000000

针对不同服务器的相同结果。 SQL Server 2008 R2 Web 版、标准版和速成版以及 SQL Server 2012 标准版。

最佳答案

差异是由于您的两个 DECIMAL 字段的精度不同:

将 @comm 更改为 (38,6) :

DECLARE
    @comm DECIMAL(38 , 6)
  , @quantity INT
  , @multiplier INT
  , @price DECIMAL(38 , 10)

我得到:
---------------------------------------
0.0034990000
0.0034990000

同样将 comm 中的 @t 更改为 [comm] [decimal](20 , 6) 让我:
---------------------------------------
0.0035000000
0.0035000000

如果字段一致,则结果将一致。

关于SQL 公式返回不一致的精度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18498994/

10-14 02:15