Немного справочной информации: У меня есть таблица с именем table_a
, которая имеет 12 столбцов. Я хочу вставить или обновить строки со значениями для 6 из этих столбцов, в то время как я не хочу потерять данные в других 6 столбцах. И я хочу сделать это с параметризованным запросом в C#.Вставка/обновление строк с некоторыми столбцами и сохранение значений других
Поле1 является уникальным.
> SELECT * FROM table_a;
+----+--------+--------+---+---------+---------+
| Id | field1*| field2 |...|field11 | field12 |
+----+--------+--------+---+---------+---------+
| 1 | AA | BB |...| KK | LL |
| 2 | AA | BB |...| KK | LL |
| 3 | AA | BB |...| KK | LL |
| 4 | AA | BB |...| KK | LL |
+----+--------+--------+---+---------+---------+
Проблема, моя первая мысль была использовать REPLACE INTO
, к сожалению, это приведет к удалению 6 не прикасались значения:
> REPLACE INTO table_a (field1, ..., field6) VALUES ('AA', ...);
> REPLACE INTO table_a (field1, ..., field6) VALUES ('AB', ...);
+----+--------+--------+---+---------+---------+
| Id | field1*| field2 |...| field11 | field12 |
+----+--------+--------+---+---------+---------+
| 1 | AA | BB |...| NULL | NULL |
| 2 | AB | BB |...| NULL | NULL |
| 3 | AC | BB |...| KK | LL |
| 4 | AD | BB |...| KK | LL |
+----+--------+--------+---+---------+---------+
Моя вторая мысль была использовать INSERT INTO ... ON DUPLICATE KEY UPDATE
, но тогда я бы должно связывать параметры а во второй раз, в первый раз в INSERT
частях и во второй раз в UPDATE
частях, как это:
INSERT INTO table_a (field1, ..., field6)
VALUES(?, ..., ?)
ON DUPLICATE KEY UPDATE
field1 = ?, ..., field6 = ?;
Это сохранит мои данные, но мне придется привязать параметры дважды.
Третий вариант заключается в создании еще двух запросов и использовании шаблонов SELECT
и INSERT INTO
/UPDATE
.
Итак, мой вопрос: как мне это сделать умным способом?
Именованные параметры выглядят как путь. К сожалению, я сижу на ODBC-Driver, который не поддерживает его. Но я думаю, что я поеду с «INSERT INTO ON DUPLICATE KEY». Благодарю. – Bobby