循环运行多个Sql命令

时间:2018-10-22 21:59:31

标签: mysql sql

我成功地从msql编辑器(phpmyadmin)执行了以下sql代码,并与一位客户(其中Customer No = 1)对其进行了测试。我现在需要为所有客户运行sql脚本。

START TRANSACTION;
INSERT INTO `addresses` (`AddressLine1`,`CityID`,`ProvStateCode`,`AddressPostCode`,`CountryIso`) SELECT `Bill To Address`,`Bill To City`,`Bill To Province`,`Bill Code`,`Country` FROM `pdx_customers` where `Customer No`=1;
SELECT @last_id := LAST_INSERT_ID();
SELECT `Customer No` FROM `pdx_customers` 
INSERT INTO `customer_addresses` (`CustID`,`AddressID`,`AddressTypeID`) Values(1,@last_id,1);
COMMIT;

似乎我需要创建一个存储过程?在一个循环中,我需要为Customer No表中的每一行动态获取pdx_customers,并在插入命令的Values子句中输入Values(@ CustID,@ last_id,1)。不知道我该怎么做?

任何帮助将不胜感激。 谢谢

2 个答案:

答案 0 :(得分:0)

您可以使用以下语句创建循环:

start transaction;
 while counter < max do
  insert into . . . ;
 set counter=counter+1;
end while;

答案 1 :(得分:0)

这是一个非常普遍的问题,我想说在sql中循环几乎不是一个好主意。这是另一种选择,您可能会认为不好,因为它确实引入了新列。我已经在一些应用程序中使用过它,它使事情变得非常简单。但这确实取决于您的用例,所以不会适合所有人。

1)首先,在地址表中添加一个新列,将其命名为不会被任何人看到的表,例如TempInsertId。

2)编写新地址时,在TempInsertId列中包含CustomerId

3)现在,您可以轻松地读回AddressId和CustomerId并将其写入CustomerAddress表

4)如果愿意,请进行最终更新以将TempInsertId设置回null。

正如我所说,并非在所有情况下都主张这样做,但这可以是解决问题的非常简单的方法。