0

環境

動的に生成された .sql ファイルには、他のテーブルに依存するさまざまなテーブルにデータを挿入するために使用される一連の挿入ステートメントが含まれています。

各挿入ステートメントが実行された後、特定のテーブルに自動インクリメントされた id 列がある場合、テキスト "SET @autoIncrementColumnName = LAST_INSERT_ID();" その挿入ステートメントの最後の挿入 ID を mysql 変数に格納するものが生成されます。次に、その特定のテーブルに別の INSERT ステートメントがある場合は、プロセスが繰り返されます。問題は、各ステートメントが「SET @autoIncrementColumnName = LAST_INSERT_ID();」であることです。後で .sql ファイルで変数を使用できるようになる前に、以前の変数を上書きします。

そのため、後で .sql スクリプトに次のような 2 行が表示されます。

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

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

以前に保存した mysql 値を挿入する必要がありますが、1 つを除いてすべての変数が上書きされています。

2 つの質問

  1. MYSQL のみを使用して可変変数を作成することは可能ですか? このような:

    SET @dynamicVarName = CONCAT('guestCreditCardId', LAST_INSERT_ID()); 
    SET @@dynamicVarName = LAST_INSERT_ID();
    
  2. 可変変数が使用できない場合、どのソリューションを使用できますか?

どうもありがとう!

4

1 に答える 1

0

答え

目の前の問題を深く調べているうちに、複数の関数/メソッドを作成し、それぞれが sql 生成の特定の部分を担当することで、頭痛の種を回避できることがわかりました。後で別の動的SQLステートメントを作成する必要がある場合は、必要な場所から別の関数/メソッドを呼び出すだけで、必要な場所に配置できます。

例えば

「INSERT INTO」SQLステートメントを生成している5つのテーブルがあり、それらのテーブルのうち3つに、他の動的SQLステートメントの作成で使用されていないレコードがある場合、1つの関数/メソッドで、使用しないすべてのテーブルを処理できます他のテーブルからのデータは必要ありません。

あらゆる特別な場合に

次に、特殊なケース用に別の関数/メソッドを作成します。

これが誰かを助けたことを願っています!

于 2013-02-04T21:41:59.213 に答える