0

入力パラメーターを持つストアド プロシージャがあります。

  @Latitude float
, @Longitude float

しかし、これらの値を渡すと:

 @Latitude=-28.640328248358344
,@Longitude=153.61249352645871

テーブルに格納されている値は次のとおりです。

Lat: -28.6403
Lng: 153.612

テーブルで標準の挿入または更新を行うと、値は正しいです。

params を float(54) に変更しようとしましたが、違いはありませんでした... float を使用している理由は、Lat/Lng が実際には地理列から計算された列であるためです (そして、デザイナーではそれらが float であると述べています) ) - ストアド プロシージャからの lat/lng 値をいくつかの varchar 列に挿入することにより、計算された列に関連していないことを再確認しました。

私は EF を使用しており、エンティティの値が正しいことを確認できます。SQL プロファイラーをチェックして、完全な値が exec 呼び出しに含まれていることを確認しました。

編集: これらの値を geography 型の GeoLocation 列呼び出しに挿入します。

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

2 に答える 2

3

float を varchar にキャストすると、精度が失われます。STRを使用して varchar に変換する

コメントには「CONVERT(varchar, @Longitude)」と書かれています。これは「入力の切り捨て」ではなく、通常の動作です

于 2011-04-17T11:16:09.943 に答える
1

これを試して:

DECLARE @Longitude FLOAT = 41.1234567

SELECT CAST(@Longitude AS VARCHAR(24))

あなたの結果は何ですか?? 私の場合、SQL Server は常に小数点以下 4 桁に切り捨てるようです.....

それがあなたの切り捨ての原因でしょうか?? VARCHAR切り捨てを引き起こすのは本当に への変換だけですか?? 値を sproc as に保存してみてFLOAT、それらの値も切り捨てられているかどうかを確認してください。

于 2011-04-17T11:15:28.753 に答える