将SQL结果分配给MySQL中prepared语句中的变量

将SQL结果分配给MySQL中prepared语句中的变量,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我正在MySQL中创建一个存储过程,需要将SQL查询的结果分配给一个变量。问题是,为了创建SELECT语句,我必须使用CONCAT函数,因为我要传入参数 看来不能在CONCAT函数中使用变量。有什么办法可以做到这一点吗?我尝试编写的过程如下: DELIMITER // CREATE PROCEDURE `my_proc` (IN tbl VARCHAR(20), IN col VARCHAR(20), IN id INT) BEGIN DECLARE @myval VARCHAR(1

我正在MySQL中创建一个存储过程,需要将SQL查询的结果分配给一个变量。问题是,为了创建SELECT语句,我必须使用CONCAT函数,因为我要传入参数

看来不能在CONCAT函数中使用变量。有什么办法可以做到这一点吗?我尝试编写的过程如下:

DELIMITER //
CREATE PROCEDURE `my_proc` (IN tbl VARCHAR(20), IN col VARCHAR(20), IN id INT)
  BEGIN
    DECLARE @myval VARCHAR(100);

    SET @t1 =CONCAT('SELECT ',col,' FROM ',tbl,' INTO @myval WHERE id = ',id );
    PREPARE stmt1 FROM @t1;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1;
END //

执行此命令会导致SQL语法错误

问题在于以下几行:

... -将@t1=CONCAT'SELECT',col',FROM',tbl',设置为@myval,其中id=',id; 将@t1=CONCAT'SELECT',col'设置为@myval FROM',tbl',其中id=',id; ... 检查文档:

下面是一个例子

指出@t1和@myval之间的差异很重要,因为myval和t1是不同的变量,因此,无需声明:

-声明@myval VARCHAR 100;
哪一行抛出错误?您正在设置@t1,但您声明了@myval。这是正确的吗?这里是错误:1064-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解在“@myval VARCHAR100”附近使用的正确语法;在第行将@t1=CONCAT'SELECT',col',FROM',tbl'设置为@myv'3@acfrancis是的,没错。我想将结果设置为@myval@t1只是select语句的一个字符串。是的,但您仍然需要声明@t1,不是吗?就是那个!秩序混乱。谢谢