【问题标题】:Stored procedure Error converting data type nvarchar to numeric存储过程将数据类型 nvarchar 转换为数值时出错
【发布时间】:2014-06-14 03:05:55
【问题描述】:

我有这个存储过程:

ALTER PROCEDURE NearUnits
    @lat float,
    @lng float
AS
BEGIN
SELECT * 
FROM
(
  SELECT Uname, Latitude, Longitude,Info, 
  (
     6371 * acos(
       sin(@lat/57.295800) * 
       sin(Latitude/57.295800) + 
       cos(@lat/57.295800) * 
       cos(Latitude/57.295800) * 
       cos(@lng/57.295800 - Longitude / 57.295800)
     )
  ) AS distance 
  FROM [dbo].[MedicalUnit]
) mytable
WHERE distance <= 20;
END;

当我执行它时:

NearUnits 31.0333449532716,31.3618322632

我收到此错误:

消息 8114,级别 16,状态 5,过程 NearUnits,第 6 行 将数据类型 nvarchar 转换为数值时出错。

虽然之前工作正常!!!

有什么解决办法吗??

【问题讨论】:

  • 表的架构是什么?
  • 对不起,你的模式是什么意思?
  • Schema 是数据类型 pif 表的列及其键可能是索引 - 但是你应该在做 andy SQL 之前知道这一点 我会重新阅读你的教程 - 如果你不理解这个术语,有可能是您在我们的任何回复中无法理解的其他内容

标签: sql sql-server stored-procedures


【解决方案1】:

托盘投射纬度或经度:

ALTER PROCEDURE NearUnits
    @lat float,
    @lng float
AS
BEGIN
SELECT * 
FROM
(
  SELECT Uname, Latitude, Longitude,Info, 
  (
     6371 * acos(
       sin(@lat/57.295800) * 
       sin(CAST(Latitude AS float)/57.295800) + 
       cos(@lat/57.295800) * 
       cos(CAST(Latitude AS float)/57.295800) * 
       cos(@lng/57.295800 - CAST(Longitude AS float) / 57.295800)
     )
  ) AS distance 
  FROM [dbo].[MedicalUnit]
) mytable
WHERE distance <= 20;
END;

【讨论】:

    猜你喜欢
    • 2018-04-06
    • 2014-07-25
    • 1970-01-01
    • 2014-03-14
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    相关资源
    最近更新 更多