csv ファイルをデータベースへの一連の挿入ステートメントに変換する小さなプログラムを作成しています。プログラムはデータベースの知識を持たないため、記述されたステートメントは 1 回限りのものであり、動的にすることはできません。
現在、各データセットには独自の GUID があり、その名前に基づいてデータセットが存在するかどうかを判断するために、ステートメントでデータベースにクエリを実行させたいと考えています。ので、私は持っています:
sw.WriteLine("-- Determine if dataset exists from school name");
sw.WriteLine(string.Format(
"INSERT INTO DataSets (Guid, DataSets ) VALUES ('{0}', '{1}') WHERE NOT EXISTS (SELECT * FROM DataSets WHERE DataSetName = '{1}')",
Guid,
DataSetName
));
(間違っている場合は訂正してください。SQL は私の得意分野ではありません) さて、次の問題は、データセットの Guid が次のような他のいくつかのテーブルで使用されていることです。
string sql = string.Format(
"INSERT INTO Table1 VALUES ('{0}', '{1}', '{2}', {3}, '{4}');",
object.value1
object.value1
object.value1
object.value1
Guid
ただし、'Guid' は c# の変数として使用できません。新しい Guid ('datasets' がデータベースに存在しない場合) または既存の GUID ('datasets' が存在する場合は、既存の GUID を取得します) のいずれかです。
だから私は次のようなものが必要になります:
string sql = string.Format(
"INSERT INTO Table1 (Data1, Data2, Data3, Data4) VALUES ('{0}', '{1}', '{2}', {3});",
object.value1
object.value1
object.value1
object.value1
string sql2 = string.Format("INSERT INTO Table1 (Data5) VALUES (SELECT Guid FROM Datasets WHERE DataSetName = '{0}');
Guid
);
これは、これを行うための良い (有効な?) 方法ですか?