我是使用存储过程的新手,使用存储过程更新和插入的最佳方法是什么。我有两个表,我可以通过不同的 ID 匹配它们,如果加载表和目标表中都存在 ID,我想更新,如果目标表中不存在该项目,我想插入。只是一个示例模板会非常有帮助,谢谢!
问问题
265 次
2 回答
0
您应该查找 SQL MERGE 语句。
它允许您执行 UPSERT - 即如果键值不存在则插入,如果键值存在则更新。
http://technet.microsoft.com/en-us/library/bb510625.aspx
但是,您需要在执行更新之前检查 2 个位置的键值确实使其更加复杂。我没有尝试过,但我认为可以使用 VIEW 或 CTE 来确定 ID 是否存在于您的两个表中,然后将 MERGE 基于 CTE/VIEW。
但绝对要从 MERGE 开始!
于 2013-08-12T13:33:06.777 回答
0
If I understood well, you want to select values in one table and insert them in other table. If the id exists in the second table, you need to update the row. If I'm not wrong you need something like this:
mysql> select * from table_1;
+----+-----------+-----------+
| id | name | last_name |
+----+-----------+-----------+
| 1 | fagace | acero |
| 2 | ratangelo | saleh |
| 3 | hectorino | josefino |
+----+-----------+-----------+
3 rows in set (0.00 sec)
mysql> select * from table_2;
+----+-----------+-----------+
| id | name | last_name |
+----+-----------+-----------+
| 1 | fagace | acero |
| 2 | ratangelo | saleh |
+----+-----------+-----------+
2 rows in set (0.00 sec)
mysql> insert into table_2 select t1.id,t1.name,t1.last_name from table_1 t1 on duplicate key update name=t1.name, last_name=t1.last_name;
Query OK, 1 row affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from table_2;
+----+-----------+-----------+
| id | name | last_name |
+----+-----------+-----------+
| 1 | fagace | acero |
| 2 | ratangelo | saleh |
| 3 | hectorino | josefino |
+----+-----------+-----------+
3 rows in set (0.00 sec)
mysql>
于 2013-08-12T14:20:02.417 回答