0

语境

我有一个动态生成的 .sql 文件,其中包含一系列插入语句,这些语句将用于将数据插入到许多依赖于其他表的不同表中。

运行每个插入语句后,如果特定表具有自动递增的 id 列,则文本“SET @autoIncrementColumnName = LAST_INSERT_ID();” 生成该插入语句的最后一个插入 id 存储在 mysql 变量中。然后,如果该特定表有另一个 INSERT 语句,则重复该过程。问题是每个语句“SET @autoIncrementColumnName = LAST_INSERT_ID();” 覆盖前一个变量,然后才能在 .sql 文件中使用该变量。

所以稍后在 .sql 脚本中,您会看到如下两行:

INSERT INTO relatedTable (col1,col2,specialColumn,col3,col4) VALUES ('','',@autoIncrementColumnName,'','');

INSERT INTO relatedTable (col1,col2,specialColumn,col3,col4) VALUES ('','',@autoIncrementColumnName,'','');

它需要插入它之前存储的 mysql 值,但所有变量都被覆盖,除了一个。

两个问题

  1. 是否可以仅使用 MYSQL 创建变量变量?像这样:

    SET @dynamicVarName = CONCAT('guestCreditCardId', LAST_INSERT_ID()); 
    SET @@dynamicVarName = LAST_INSERT_ID();
    
  2. 如果变量变量是不可能的,我可以使用什么解决方案?

太感谢了!

4

1 回答 1

0

回答

在深入研究手头的问题时,我发现我可以通过创建多个函数/方法来避免头痛,每个函数/方法负责 sql 生成的特定部分。这样以后,如果您需要创建另一个动态 sql 语句,您可以通过从任何需要的地方调用另一个函数/方法来将其放置在需要的地方。

例如

如果您有 5 个要为其生成“INSERT INTO”sql 语句的表,其中 3 个表的记录未用于创建其他动态 sql 语句,那么您可以让一个函数/方法处理所有不使用的表'不需要来自其他表的数据。

对于任何特殊情况

然后为特殊情况创建单独的函数/方法。

希望这对某人有所帮助!

于 2013-02-04T21:41:59.213 回答