mysql 存储过程 数据库表名字段作为参数传递给存储过程的方法

如题所述

直接将数据库表名字段作为字符类型传到存储过程中,存储过程拼接sql语句,再用exec执行。例如:
CREATE PROCEDURE [proc_test]
(@tablename varchar(100))
WITH
EXECUTE AS CALLER
AS
declare @sql varchar(1000);
set @sql='select * from '+@tablename
exec(@sql)
GO

再直接执行 exec proc_test '学生表'追问

set l_sql=CONCAT_WS(' ','select min(id) from',in_table); 字符串拼接完 我执行这条语句 报Unknown column 'data' in 'field list' 但我是有这个表的

追答

你的表名叫field list?

追问

表名就是要输入的参数啊 这里是data 你上面给的示例不适用于mysql吧

追答

我看你报的错,你是试图从'field list' 这张表里去读取 'data'列啊。你再检查一下拼接后的sql语句

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-09-30
直接将数据库表名字段作为字符类型传到存储过程中,存储过程拼接sql语句,再用exec执行。例如:
CREATE PROCEDURE [proc_test]
(@tablename varchar(100))
WITH
EXECUTE AS CALLER
AS
declare @sql varchar(1000);
set @sql='select * from '+@tablename
exec(@sql)
GO

再直接执行 exec proc_test '学生表'
第2个回答  2012-03-21
表名字段为name的话
用POST的话就是这样取$_POST['name']
用GET同理一样
第3个回答  2020-06-28
BEGIN
SET @sqlStr:=CONCAT("select * from ",c);
PREPARE stmt from @sqlStr;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
c是你传进来的值的变量IN `c` varchar(100)
相似回答