Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL存储过程中按ID获取行?_Mysql_Sql Server_Stored Procedures - Fatal编程技术网

如何在MySQL存储过程中按ID获取行?

如何在MySQL存储过程中按ID获取行?,mysql,sql-server,stored-procedures,Mysql,Sql Server,Stored Procedures,我对MySQL中的存储过程有问题。我希望通过传递ID参数获得一行,但是,SP似乎忽略了WHERE过滤器并显示表中的所有列 我觉得奇怪的是,如果我在存储过程之外的查询中传递id的特定值,例如1003,就会返回预期的结果 对不起,如果我的错误是愚蠢的,我是新手 表结构如下所示: CREATE TABLE Paciente ( ID INT AUTO_INCREMENT NOT NULL, DNI CHAR(8) UNIQUE NULL, Nombre NVARCHAR(70

我对MySQL中的存储过程有问题。我希望通过传递ID参数获得一行,但是,SP似乎忽略了WHERE过滤器并显示表中的所有列

我觉得奇怪的是,如果我在存储过程之外的查询中传递id的特定值,例如1003,就会返回预期的结果

对不起,如果我的错误是愚蠢的,我是新手

表结构如下所示:

CREATE TABLE Paciente
 (
    ID INT AUTO_INCREMENT NOT NULL,
    DNI CHAR(8) UNIQUE NULL,
    Nombre NVARCHAR(70) NOT NULL,
    Apellido_Paterno NVARCHAR(30) NOT NULL,
    Apellido_Materno NVARCHAR(30) NOT NULL,
    Edad TINYINT NOT NULL,
    Sexo CHAR(1) NOT NULL,
    Calle NVARCHAR(50) NULL,
    Numero_Domicilio SMALLINT(4) NULL,
    Telefono NVARCHAR(8) NULL,
    Movil NVARCHAR(10) NULL,
    Estado_Civil NVARCHAR(20) NULL,
    Ocupacion NVARCHAR(30) NULL,
    Fecha_Registro DATETIME DEFAULT CURRENT_TIMESTAMP,
    Estado BOOLEAN NULL DEFAULT TRUE,
    PRIMARY KEY(ID)
)ENGINE = InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1000;


Stored Procedure:

DELIMITER $$
CREATE PROCEDURE `buscarPaciente`(IN id INT)
BEGIN
SELECT * FROM Paciente WHERE ID = id LIMIT 1;
END
$$
DELIMITER ;

这种行为是由于将输入参数命名为与列名相同,因此mysql无法区分列和
where
子句中的参数。将输入参数重命名为
param_ID
,它将返回带有请求的
ID
值的记录

DELIMITER $$
CREATE PROCEDURE `buscarPaciente`(IN param_ID INT)
    BEGIN
        SELECT * FROM Paciente WHERE ID = param_ID LIMIT 1;
    END
$$
DELIMITER ;

你是指列还是行?只有一条记录哦,是的,对不起,我弄错了。嘿,非常感谢,你是对的,这解决了我的问题。现在它工作了!!谢谢。