稍微背景信息:我有一個名爲table_a
的表,它有12列。我想插入或更新這些列中的6個值的行,而我不想丟失其他6列中的數據。我想用C#中的參數化查詢來做到這一點。插入/更新某些列的行並保留其他列的值
field1是唯一的。
> 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驅動程序。但是我想我會一直使用'INSERT INTO ON DUPLICATE KEY'。謝謝。 – Bobby 2010-09-28 06:23:46