2011-04-17 31 views
0

我有一個具有輸入PARAMS存儲過程:存儲過程浮點輸入PARAM截斷值

@Latitude float 
, @Longitude float 

但是當我通過這些值:被存儲在表中

@Latitude=-28.640328248358344 
,@Longitude=153.61249352645871 

的值是:

Lat: -28.6403 
Lng: 153.612 

如果我在表上執行標準插入或更新,值是正確的。

我試着將參數改爲float(54),但它沒有區別...我使用float的原因是因爲Lat/Lng實際上是從地理列中計算出來的cols(並且它在設計器中聲明它們是浮動的) - 我已經通過將存儲過程中的lat/lng值插入到幾個varchar列中來檢查它與計算列沒有關係。

我使用EF並可以確認實體中的值是否正確,並且我已檢查SQL事件探查器以確認EXEC調用中包含完整值。

編輯: 我插入這些值代入式地理列調用地理定位:

GeoLocation = geography::STPointFromText('POINT(' + CONVERT(varchar, @Longitude) + ' ' + CONVERT(varchar, @Latitude) + ')',4326) 
+0

@marc_s - 我的問題明確指出,我使用地理欄和我的SP我有--- GeoLocation =地理:: STPointFromText('POINT('+ CONVERT( varchar,@Longitude)+''+ CONVERT(varchar,@Latitude)+')',4326)---但這是無關緊要的,因爲我還提到我將raw @ lat/lngs存儲在varchar col中以查看他們看起來像,他們也被截斷... – Rob 2011-04-17 11:08:35

+0

我同意marc_s:從你的問題,甚至你的澄清上面,目標列的數據類型不清楚。你說你從一個地理列中獲取你的值,並將它們用於測試目的插入到varchar列中;但值顯示被截斷的列的數據類型是什麼? 「...存儲在表中的值...」 - – Tim 2011-04-17 11:13:39

+0

Computed Float列和Varchar Cols(我做了一個額外的測試)都被截斷了 – Rob 2011-04-17 11:15:15

回答

3

當您將float float轉換爲varchar時,您將失去準確性。使用STR轉換爲varchar

評論說「CONVERT(varchar,@Longitude)」。這不是「截斷輸入」,但正常的行爲

+0

謝謝你讓我瘋狂! – Rob 2011-04-17 11:20:30

1

試試這個:

DECLARE @Longitude FLOAT = 41.1234567 

SELECT CAST(@Longitude AS VARCHAR(24)) 

你是什麼結果?在我的情況下,似乎SQL Server將始終截斷到小數點後四位數字.....

作爲您的截斷原因?這只是轉換到VARCHAR,導致截斷?嘗試將值存儲在存儲區中的值爲FLOAT,並查看這些值是否也被截斷 - 我非常肯定他們不會!