Cri*_*nja 4 sql t-sql sql-server
两次查询的结果应该相同。相同的数据。同样的公式。同样的演员阵容。一个结果是针对表变量在查询中计算的,而第二个结果是针对变量计算的。我已经用临时表和永久表替换了表变量,结果相同。
为什么我的结果不一样?
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));
Run Code Online (Sandbox Code Playgroud)
结果
1. 0.0034990000
2. 0.0035000000
Run Code Online (Sandbox Code Playgroud)
针对不同服务器的相同结果。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)
Run Code Online (Sandbox Code Playgroud)
我得到:
---------------------------------------
0.0034990000
0.0034990000
Run Code Online (Sandbox Code Playgroud)
同样的变化comm在@t给[comm] [decimal](20 , 6)打动了我:
---------------------------------------
0.0035000000
0.0035000000
Run Code Online (Sandbox Code Playgroud)
如果字段一致,则结果将一致。