【发布时间】:2011-04-17 10:59:55
【问题描述】:
我有一个具有输入参数的存储过程:
@Latitude float
, @Longitude float
但是当我传递这些值时:
@Latitude=-28.640328248358344
,@Longitude=153.61249352645871
表中存储的值是:
Lat: -28.6403
Lng: 153.612
如果我对表进行标准插入或更新,则值是正确的。
我尝试将参数更改为 float(54),但没有任何区别...我使用浮点数的原因是因为 Lat/Lng 实际上是从地理列计算的列(并且它在设计器中声明它们是浮点数)-我通过将存储过程中的 lat/lng 值插入几个 varchar 列来仔细检查它是否与计算的 cols 无关。
我正在使用 EF 并且可以确认实体中的值是正确的,并且我已经检查了 SQL Profiler 以确认完整的值包含在 exec 调用中。
编辑: 我将这些值插入到地理类型的名为 GeoLocation 的列中:
GeoLocation = geography::STPointFromText('POINT(' + CONVERT(varchar, @Longitude) + ' ' + CONVERT(varchar, @Latitude) + ')',4326)
【问题讨论】:
-
@marc_s - 我的问题清楚地表明我使用地理列并且在我的 SP 中我有 --- GeoLocation = geography::STPointFromText('POINT(' + CONVERT(varchar, @Longitude) + ' ' + CONVERT(varchar, @Latitude) + ')',4326) --- 但这无关紧要,因为我还提到我将原始 @lat/lngs 存储在 varchar col 中以查看它们的外观和它们是也被截断了...
-
我同意marc_s:从你的问题,甚至你上面的澄清,目标列的数据类型都不清楚。您说您从地理列中获取值,并将它们插入到 varchar 列中以进行测试;但是值似乎被截断的列的数据类型是什么? "...存储在表中的值..." --
-
Computed Float 列和 Varchar Cols(我做了额外的测试)都被截断了
-
如果您使用 PRINT 检查这些结果,PRINT 总是将浮点数截断为 4 dp。
标签: sql-server stored-procedures input-parameters