更新变量的MYSQL存储过程为0

更新变量的MYSQL存储过程为0,mysql,stored-procedures,Mysql,Stored Procedures,我在MYSQL数据库中有以下存储过程。存储过程得到lon,lat,然后我在另一个数据库和表上进行更新 DROP PROCEDURE IF EXISTS annuals.updateSalesFlorida; CREATE DEFINER=`dddd`@`%` PROCEDURE `updateSales`(propertyId int) BEGIN DECLARE lat FLOAT; DECLARE lon FLOAT; SELECT SitusLongitude

我在MYSQL数据库中有以下存储过程。存储过程得到lon,lat,然后我在另一个数据库和表上进行更新

DROP PROCEDURE IF EXISTS annuals.updateSalesFlorida;
CREATE DEFINER=`dddd`@`%` PROCEDURE `updateSales`(propertyId int)
BEGIN

   DECLARE lat   FLOAT;
    DECLARE lon FLOAT;


  SELECT  SitusLongitude,SitusLatitude
  INTO lon,lat
  FROM annuals.florida
  WHERE PropertyID=propertyId
  LIMIT 1 FOR UPDATE;

  UPDATE sales.florida
  SET
    `SitusLongitude` = lon,
    `SitusLatitude` = lat
  WHERE PROPERTYUNIQUEID=propertyId;

END;

每次运行存储过程时,
SitusLongitude
SitusLatitude
列都是0。我知道前面选择的
SitusLongitude
situslation
中有实际值。由于某些原因,变量未在lat、lon中设置。知道我错了什么吗?

问题是过程参数与表中的一列同名。在查询中引用
propertyid
时,它使用的是列,而不是参数。列和变量名不区分大小写,因此拼写其中一个
PropertyID
和另一个
PropertyID
并不重要

为参数使用不同的名称,例如
p_propertyId

另外,不需要两个查询,您可以使用
连接在一个查询中完成

UPDATE sales.florida AS s
CROSS JOIN (
    SELECT *
    FROM annuals.florida
    WHERE propertyId = p_propertyId
    LIMIT 1) AS a
SET s.SitusLongitude = a.SitusLongitude, s.SitusLatitude = a.SitusLatitude
WHERE s.PROPERTYUNIQUEID = p_propertyId

请注意,如果使用
LIMIT
而不使用
ORDER BY
,则表示所选行将不可预测。

可能会出现任意数量的错误。您没有向我们显示您的表、数据、输入或输出,但您希望我们接受您的断言,即您的代码同时正确和不正确。请提供一个,理想情况下使用。为什么要作为两个查询来执行此操作?只需使用
JOIN
进行一次
UPDATE
查询即可。不确定如何进行,我认为上述操作会更简单。