mysql存储过程 把SQL语句返回结果赋给一个变量,该SQL语句返回的结果不止一条,该怎么写,新手,求指教!
作者&投稿:歹卷 (若有异议请与网页底部的电邮联系)
call proc_t(@uname,@upwd,5);
select @uname,@upwd ;
帮你顶,呵呵。
用select...into语句
下面是mysql 5.0的帮助文档的:
这个SELECT语法把选定的列直接存储到变量。因此,只有单一的行可以被取回。
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
注意,用户变量名在MySQL 5.1中是对大小写不敏感的。请参阅9.3节,“用户变量”。
重要: SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的局部变量,MySQL当前把参考解释为一个变量的名字。例如,在下面的语句中,xname 被解释为到xname variable 的参考而不是到xname column的:
CREATE PROCEDURE sp1 (x VARCHAR(5))
BEGIN
DECLARE xname VARCHAR(5) DEFAULT 'bob';
DECLARE newname VARCHAR(5);
DECLARE xid INT;
SELECT xname,id INTO newname,xid
FROM table1 WHERE xname = xname;
SELECT newname;
END;
当这个程序被调用的时候,无论table.xname列的值是什么,变量newname将返回值‘bob’。
如果数据量小的话,导入excel里再导到mysql也好
你可以建一个临时表,吧这些数据全存进去
用这条语句
select into
两条合成一条sql:
select A.userid , B.salary from userinfo A inner join salaryinfo B on A.userid=B.userid where A.deptid=a
你可以运用java的List接口动态存取你要输出的参数,这不仅只是数据库语句,要用到java
select userid,salary from salaryinfo where userid in
(select userid from userinfo where deptid=@a)
或:
select userid,salary from salaryinfo where exists(
select userid from userinfo where deptid=@a and userinfo.userid=salaryinfo.userid)
推荐第二种,因为exists系统会根据索引进行搜索
成王果盐酸: select userid,salary from salaryinfo where userid in (select userid from userinfo where deptid=@a) 或:select userid,salary from salaryinfo where exists( select userid from userinfo where deptid=@a and userinfo.userid=salaryinfo.userid) 推荐第二种,因为exists系统会根据索引进行搜索
泸水县13234336499: 怎么把mysql存储过程sql语句打出来 - ?
成王果盐酸: call sp_add(); 是不是你定义的过程有问题吧,并没有指出返回结果来 像我这样是可以的:CREATE PROCEDURE sp_add(a int, b int,out c int) begin set c=a+ b; end; 调用过程:call sp_add (1,2,@a); select @a;
泸水县13234336499: 怎么使用sql语句返回存储过程的内容 - ?
成王果盐酸: 你可以将sp_helptext 放到 查询分析器里 工具--自定义 对应的CTRL+F1 后面,这样以后要看存储过程的内容就可以 选中存储过程的名称 同时按CTRL和F1键就可以了
泸水县13234336499: MYSQL 存储过程能返回结果集吗 - ?
成王果盐酸: 可以,存储过程只是把你的查询语句形成一个固定的格式,这样你要查询的时候就不用每次都执行查询语句了,sql在执行的时候都会将你的sql语句转换为字节码,然后机器才能运行,存储过程就节省了这一步,已经形成了字节码,所以速度才会快,特别是执行次数比较多的时候,可以节省很多时间
泸水县13234336499: mysql 调用带返回值的存储过程 sql语法不要拿来了 - ?
成王果盐酸: call proc_t(@uname,@upwd,5); select @uname,@upwd ; 帮你顶,呵呵.
泸水县13234336499: SQL 取存储过程的返回值 - ?
成王果盐酸: 你这个存储过程,这样直接返回字符串,是不行的.存储过程直接返回,只能返回int类型的数据,或者是int类型的字符串.你需要为你的存储过程定义一个输出参数.然后在调用时,接收这个输出参数.
泸水县13234336499: sql中如何通过存储过程返回结果集 - ?
成王果盐酸: SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["constring"]); SqlCommand cmd1 = new SqlCommand("存储过程名", conn); conn.Open(); cmd1.CommandType = CommandType....
泸水县13234336499: 如何创建MySQL存储过程可以返回一个表类型的数据 - ?
成王果盐酸: 首先需要知道“另一个存储过程”的结果集的所有列的类型. 假设“另一个存储过程”的名字是sp1,没有参数,返回的结果集共3列,全部为int型,那么“存储过程”里添加一个与结果集列数相同的临时表或表变量用于接收“另一个存储过程...
泸水县13234336499: MYSQL 存储过程 动态指定返回列 - ?
成王果盐酸: create proc sp_getcolumnfromA(@col varchar(20)) as begin declare @sqlstr varchar(1000) set @sqlstr = 'select ' + @col + ' from tb' exec(@sqlstr) end go exec sp_getcolumnfromA 'A,B' exec sp_getcolumnfromA 'A' exec sp_getcolumnfromA 'A,B,C'
泸水县13234336499: SQL存储过程如何调用存储过程? - ?
成王果盐酸: 1、首先先创建一个存储过程,代码如图,存储过程主要的功能是为表JingYan插入新的数据. 2、执行这几行代码,看到执行成功,数据库里现在已经有存储过程sp_JY. 3、先看下JingYan表里目前的数组,如图,只有三行数据. 4、在...