SQL 值超出范围
本文关键字:范围 SQL | 更新日期: 2023-09-27 17:56:51
我有一个存储过程,参数如下:
@longitude decimal(5, 5),
@latitude decimal(5, 5),
@radius decimal(2, 2),
@DayOfWeek int
我传入经度-87.66826
,我得到
参数值 '-87.66826' 超出范围。
我在这里错过了什么愚蠢的东西吗?
将@longitude decimal(5,5)
更改为@longitude decimal(7,5)
。还要更改其他十进制参数类型。
decimal(5,5)
表示小数点前的 0 位数字和小数点后的 5 位数字。但是您需要在小数点之前有 2 位数字,在小数点后需要 5 位数字。所以总长度是 7。
此外,建议将这些类型用于在 Sql Sevrer 2008 中存储语言和经度。您可以阅读本文以使用这些类型。
您应该查看新的空间数据类型,这些数据类型是 在 SQL Server 2008 中引入。他们是专门设计的 一种任务,使索引和查询数据变得更加容易, 更高效。
Decimal(5,5)
表示 5 个总数字和小数点后面的 5 个数字,因此它表示小数点前的零位。
此外,根据您使用的SQL Server,还有geometry
数据类型可以存储经度和纬度
简单。
像这样改变
@longitude decimal(7,5),
@latitude decimal(7,5),
@radius decimal(2,2),
@DayOfWeek int
decimal [ (p[ ,s] )] and numeric[ (p[ ,s] )]
根据十进制和数字 (Transact-SQL):
固定精度和小数位数。当使用最大精度时, 有效值为 - 10^38 +1 到 10^38 - 1。ISO 同义词 对于十进制,是 dec 和 dec(p, s)。数值在功能上是等效的 到十进制。
P(精度)
将存储的最大十进制数字总数,两者 小数点的左侧和右侧。精度必须 是介于 1 到最大精度 38 之间的值。默认 精度为 18。
s(刻度)
将存储在 小数点。从 p 中减去此数字以确定 小数点左侧的最大位数。规模必须 是 0 到 p 之间的值。仅当精度时才能指定小数位数 是指定的。默认比例为 0;因此,0 <= s <= p。最大 存储大小因精度而异。