存储过程 - 更新和插入

时间:2013-08-12 13:15:20

标签: sql sql-server sql-server-2008 stored-procedures

我是新手使用存储过程,使用存储过程更新和插入的最佳方法是什么。我有两个表,我可以通过一个不同的ID匹配它们,如果我的加载表和目标表中都存在ID,我想更新,如果目标表中不存在该项,我想插入。只是一个示例模板非常有用,谢谢!

2 个答案:

答案 0 :(得分:0)

您应该查找SQL MERGE语句。

它允许你执行UPSERT - 即如果键值尚不存在则INSERT,如果键存在则更新。

http://technet.microsoft.com/en-us/library/bb510625.aspx

但是,在执行更新之前,您需要在2个位置检查键值确实会使其更复杂。我没试过这个,但我认为可以使用VIEW或CTE来确定你的桌子和桌子上是否存在ID。然后将MERGE基于CTE / VIEW。

但一定要先看看MERGE!

答案 1 :(得分:0)

如果我理解得很好,你想在一个表中选择值并将它们插入到其他表中。如果第二个表中存在id,则需要更新该行。如果我没错,你需要这样的东西:

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>