2017-05-02 78 views
0

我在SQL Server數據庫中有2個表。我在兩個表中插入相同的值,唯一不同的是插入順序。在更改行的插入順序後SQL Server中的行總數不正確

的樣本值:

-422.82, 422.82, -407.78, 407.78 

ztFloat2表的SUM是錯誤的。

我檢查了兩張表的數據頁。所有的插槽值都是相同的。它是一個經典的浮點數據類型問題還是SQL Server BUG?

CREATE TABLE ztFloat1 ([Qty] [float] NOT NULL) 

insert into ztFloat1 select -422.82 
insert into ztFloat1 select 422.82 
insert into ztFloat1 select -407.78 
insert into ztFloat1 select 407.78 

select SUM(Qty) from ztFloat1 -- **RESULT = 0** 


CREATE TABLE ztFloat2([Qty] [float] NOT NULL) 

insert into ztFloat2 select -422.82 
insert into ztFloat2 select -407.78 
insert into ztFloat2 select 422.82 
insert into ztFloat2 select 407.78 

select SUM(Qty) from ztFloat2 -- **RESULT =-1,13686837721616E-13** 

注:問題

+6

使用十進制數據類型來代替。 (你看到的是浮點行爲。) – jarlh

+0

適合我在SQL Server,Postgres和Oracle中沒有問題。 –

+2

對於表,有* no *固有的用戶可觀察的排序。短語「插入順序」沒有意義。表是一組*行*無序。 –

回答

0

有趣的問題。您需要定義浮動值ztFloat2像下面

CREATE TABLE ztFloat2([Qty] [float](24) NOT NULL) 

insert into ztFloat2 select -422.82 
insert into ztFloat2 select -407.78 
insert into ztFloat2 select 422.82 
insert into ztFloat2 select 407.78 

select SUM(Qty) from ztFloat2 

如果定義大於25浮點值,它會顯示導致指數格式。下面的鏈接很有用。

https://www.toadworld.com/platforms/sql-server/w/wiki/10177.data-types-approximate-numeric

感謝,