私の SQL 2012 DB には 2 つのテーブルがあります。テーブル: 航海と国。
テーブル Voyages には、"destinationID" (対応する国 ID を表す) という情報が含まれています。Voyages のデータは、国名を含むテキスト ファイルからインポートされています。私が達成したかったのは次のとおりです。
- Voyages テーブルに新しい行が追加されると、最初に新しい行が Countries テーブルに追加されます (新しい countryID を生成し、国名を挿入します)。
- 新しい Country 行が追加されると、生成された countryID を使用して新しい Voyages 行が挿入されます (countryID を destinationID として設定します)。
テキスト ファイルを解析して国名を抽出し、それを DB に追加して新しい国 ID を取得することで、アプリケーションでこれを実行できることはわかっています。次に、新しい ID を使用して新しい Voyages 行を追加できます。しかし、DBでジョブ全体を実行することもできますか? トリガーを使用することを考えました。
しかし、最初は国名の文字列を Voyages テーブルに挿入する必要があり、最終的には代わりに countryID (int) を挿入する必要があるという問題が発生します。
これは、私が本当に好きではないある種の回避策になります。
INSERT INTO voyages (voyageID, destinationID, destinationString) VALUES (1, 0, "BRAZIL");
このように、新しい国の行を挿入するために、destinationString を抽出するトリガー (INSTEAD OF INSERT) を作成できます。
INSERT INTO countries (countryName) VALUES ("BRAZIL");
結果の countryID (例: 27) をトリガー内で使用して、最終的に航海に新しい行を挿入できます。
INSERT INTO voyages (voyageID, destinationID, destinationString) VALUES (1, 27, NULL);
これを行うためのよりエレガントな方法はありますか?
どうもありがとう!