mysql存储过程把字段作为传入参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql存储过程把字段作为传入参数相关的知识,希望对你有一定的参考价值。

create procedure pro_name(in monthNow int,in bankType1 varchar(225),in banktype2 varchar(225),in yearNow int)
BEGIN
START TRANSACTION;
select rb_year as 年份,rb_month as 月份, rb_comp_name as 公司,bankType1 as 当年累计 from
tb_name rb_Month=@monthNow and rb_year=@yearNow order by bankType1 desc limit 0,3;
select @bankType1
COMMIT;

提示:bankType1 是表中的字段名,但是作为sql中的排序,传入参数该怎么传,还有前面要查处次字段(bankType1 ) 的数字
END
banktype2 可以不考虑,忘了啊

参考技术A 要对bankType1传参就在 begin 後面添加
declare @bankType1 varchar(225)
set @bankType1=(select bankType1 from 表名)

delphi 中用数组作为参数传入sql语句中

比如说
var
jsh:array of integer;
…………

with Query1 do
begin
close;
sql.clear;

//sql.add('select * from JS where JSH IN (....));

open;
fetchall;
end;

现在想把jsh中的参数传入sql语句中where后面的判断语句中。该怎么写

参考技术A 直接用string多简单,把参数构造成'a','b','c'......形式的,在sql.add中直接字符串相中不就行了 参考技术B 先在上面定义一个string类型变量
如:
str_sql : string;
下面
sql.clear;
str_sql= '';
for i := Low(jsh) to High(jsh) do
begin
if str_sql = '' then
str_sql = str_sql + jsh[i] ;
else
str_sql = str_sql + ',' + jsh[i];
end;
end;

if str_sql = '' then
sql.add('select * from JS');
else
sql.add('select * from JS where ('+str_sql+') IN (....)');
end;追问

虽然写的有些不认真,但这个方法可行。

追答

汗,不好意思啊,DELPHI我只是偶尔用用的,所以写的不好哦

本回答被提问者和网友采纳
参考技术C 用for循环吧追问

sql为select的时候用for很多结果集吧?还是说for用在sql语句里面?能具体点不?

以上是关于mysql存储过程把字段作为传入参数的主要内容,如果未能解决你的问题,请参考以下文章

如何在存储过程中删除一张表,表名是作为参数传入的

mysql存储过程实现数据查询与插入

mysql 存储过程,传人字符串数组

c#调用Mysql带参数的存储过程

mysql存储过程 将传入的参数用作为表名 执行时提示错误 Table 'asteriskcdrdb.tbname' doesn't exist

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