Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 存储过程-更新和插入_Sql_Sql Server_Sql Server 2008_Stored Procedures - Fatal编程技术网

Sql 存储过程-更新和插入

Sql 存储过程-更新和插入,sql,sql-server,sql-server-2008,stored-procedures,Sql,Sql Server,Sql Server 2008,Stored Procedures,我不熟悉使用存储过程,使用存储过程更新和插入的最佳方法是什么。我有两个表,我可以通过一个不同的ID来匹配它们,我想更新我的加载表和目标表中是否都存在该ID,如果目标表中不存在该项,我想插入。只是一个示例模板将非常有用,谢谢 您应该查找SQL MERGE语句 它允许您执行UPSERT,即,如果键值不存在,则插入,如果键值存在,则更新 但是,在执行更新之前,需要在两个位置检查键值,这会使更新更加复杂。我没有尝试过这个方法,但我认为可以使用视图或CTE来确定ID是否存在于两个表中,然后根据CTE/视图

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

您应该查找SQL MERGE语句

它允许您执行UPSERT,即,如果键值不存在,则插入,如果键值存在,则更新

但是,在执行更新之前,需要在两个位置检查键值,这会使更新更加复杂。我没有尝试过这个方法,但我认为可以使用视图或CTE来确定ID是否存在于两个表中,然后根据CTE/视图进行合并


但一定要先看看合并

如果我理解得很好,您希望在一个表中选择值并将其插入另一个表中。如果第二个表中存在该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> 

对此,您可能不需要存储过程。首先告诉我们什么是RDBMS MySql、SQL Server、Oracle。。。您使用的是什么版本?对不起,我使用的是SQL Server 2008 OP使用的是SQL Server而不是MySql