MySQL简单查询错误

时间:2014-04-11 15:53:52

标签: mysql

我需要帮助这个查询,这对我不起作用,不知道为什么,找不到错误。

-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `buscarchile`(dni int)
BEGIN
SELECT Nombre, Apellido FROM chile WHERE DNI = dni;
END

使用这段代码,它给了我名字/ Nombre和姓氏/ Apellido,它的dni是否正确。我也尝试过这种方式:

-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `buscarchile`(dni int)
BEGIN
SELECT Nombre, Apellido FROM chile WHERE DNI = @dni;
END

但是,如果我输入正确的dni或者它没有给我任何数据,就像它找不到任何有dni的人,但我知道有人有完全相同的dni。

请帮帮我,谢谢。

1 个答案:

答案 0 :(得分:0)

声明

SELECT Nombre, Apellido FROM chile WHERE DNI = dni;

列名DNI和变量名dni之间存在名称冲突。

对变量或程序参数使用var_ColumnName种做法是更好的做法。

无论是否维护此类实践,如果将参数读入局部变量并在SQL语句中使用相同的内容,则会更好。

像这样改变您的日常工作

delimiter //

create
  DEFINER=`root`@`localhost` 
  procedure `buscarchile`( dni int )
begin

  declare var_DNI int = dni;

  SELECT Nombre, Apellido FROM chile WHERE DNI = var_DNI;

end;
//

delimiter ;