sql如何批量进行执行存储过程并传参数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql如何批量进行执行存储过程并传参数?相关的知识,希望对你有一定的参考价值。

有一个存储过程sp_updateuser 是进行内部处理数据的 要给这个存储过程进行传入id值。然后先查一个表 select id from users where status<>'1' 检索出来的结果好多条、这些数据都是要去执行存储过程sp_updateuser @id=? 、那么如何运行一次把select那一句检索出来的所有行都执行那个存储过程并把@id传进去?

把SQL语句写成存储过程,这样以后每次只需要调用存储过程就行了 参考技术A 把 select id from users where status<>'1' 写在那个内部存储过程里面调用不可以嘛?那就可以直接引用查出来的ID了

Mysql慢查询开启和查看 ,存储过程批量插入1000万条记录进行慢查询测试

首先登陆进入Mysql命令行  执行sql      show variables like \'slow_query%\';  结果为OFF 说明还未开启慢查询

执行sql     show variables like \'long_query_time\';  可以看到具体的慢查询 “”时限“

 

我们先开启慢查询 执行sql

 set global slow_query_log=\'ON\';

这是再去查询一下(show variables like \'slow_query%\';)发现已经开启了。

也可以设置时限为1秒

set global long_query_time=1;

 

上面的方法只是临时生效,mysql重启后就会失效

 

我们设置永久性的需要 在/etc/my.cnf里设置 (如果是win phpstudy 则在my.ini里添加)

# 慢查询日志
slow_query_log = ON
slow_query_log_file = D:\\phpstudy\\PHPTutorial\\MySQL\\data\\XX-081269-01-slow.log
long_query_time = 1

重启即可

 

下面我们来慢查询执行一次

首先建表 批量插入1000万条测试记录

 1 #创建测试的test表 
 2 DROP TABLE IF EXISTS test;  
 3 CREATE TABLE test(  
 4     ID INT(10) NOT NULL,  
 5     `Name` VARCHAR(20) DEFAULT \'\' NOT NULL,  
 6     PRIMARY KEY( ID )  
 7 )ENGINE=INNODB DEFAULT CHARSET utf8;  
 8  
 9 #创建生成测试数据的存储过程 
10 DROP PROCEDURE IF EXISTS pre_test;  
11 DELIMITER // 
12 CREATE PROCEDURE pre_test()  
13 BEGIN  
14 DECLARE i INT DEFAULT 0;  
15 SET autocommit = 0;  
16 WHILE i<10000000 DO  
17 INSERT INTO test ( ID,`Name` ) VALUES( i, CONCAT( \'Carl\', i ) );  
18 SET i = i+1;  
19 IF i%2000 = 0 THEN  
20 COMMIT;  
21 END IF;  
22 END WHILE;  
23 END; // 
24 DELIMITER ; 
25  
26 #执行存储过程生成测试数据 
27 CALL pre_test(); 

 

以上是关于sql如何批量进行执行存储过程并传参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何写sqlserver2000存储过程?用于批量录入数据,求解

如何执行存储过程

MS SQL 批量给存储过程/函数授权

sql 存储过程输入参数个数不定的写法

sql存储过程有什么用

Mysql慢查询开启和查看 ,存储过程批量插入1000万条记录进行慢查询测试