我有一个带有如下参数的存储过程:
@longitude decimal(5, 5),
@latitude decimal(5, 5),
@radius decimal(2, 2),
@DayOfWeek int
我传给-87.66826
经度,我得
参数值'-87.66826'超出范围。
我在这里错过了一些愚蠢的东西吗?
答案 0 :(得分:4)
将@longitude decimal(5,5)
更改为@longitude decimal(7,5)
。也可以更改其他小数参数类型。
decimal(5,5)
表示小数点前的0位和小数点后的5位。
但是你需要2位数字和小数点后5位数。总长度是7。
这些类型也建议用于存储Sql Sevrer 2008中的经度和经度。 您可以阅读this文章以了解如何使用这些类型。
您应该看一下新的Spatial数据类型 在SQL Server 2008中引入。它们是专门为此设计的 一种任务,使索引和查询数据更容易和 效率更高。
答案 1 :(得分:2)
Decimal(5,5)
表示总数为5位,小数点后5位,因此它表示小数点前的零位数。
此外,取决于您使用的SQL Server,还有geometry
数据类型可以存储经度和纬度
答案 2 :(得分:1)
简单..
像这样改变
@longitude decimal(7,5),
@latitude decimal(7,5),
@radius decimal(2,2),
@DayOfWeek int
decimal [ (p[ ,s] )] and numeric[ (p[ ,s] )]
根据decimal and numeric (Transact-SQL):
修正了精度和刻度数。使用最大精度时 有效值来自 - 10 ^ 38 +1到10 ^ 38 - 1.IIS同义词 对于十进制,则为dec和dec(p,s)。数字在功能上是等价的 到十进制。
p(精确度)
将存储的最大小数位数 在小数点的左侧和右侧。精度必须 是一个从1到最大精度为38的值。默认值 精度是18。
s(比例)
将存储在右侧的小数位数 小数点。从p中减去该数字以确定 小数点左边的最大位数。规模必须 是从0到p的值。只有精度才能指定比例 已指定。默认比例为0;因此,0 <= s <= p。最大值 存储大小因精度而异。