2013-08-12 3 views
1

Я новичок в использовании хранимых процедур, что лучше всего обновить и вставить с помощью хранимых процедур. У меня есть две таблицы, и я могу сопоставить их с помощью отдельного идентификатора, я хочу обновить, если ID существует как в моей таблице загрузки, так и в моей таблице назначения, и я хочу вставить, если элемент не существует в моей таблице назначения. Просто примерный шаблон будет очень полезен, спасибо!Сохраненные процедуры - обновление и вставка

+0

Вам, вероятно, не нужна хранимая процедура для этого. Прежде всего, скажите нам, какие RDBMS (MySql, SQL Server, Oracle ...) вы используете и какую версию? – peterm

+0

Извините, я использую SQL Server 2008 – Bobcat88

ответ

0

Если я правильно понял, вы хотите выбрать значения в одной таблице и вставить их в другую таблицу. Если идентификатор существует во второй таблице, вам необходимо обновить строку. Если я не ошибаюсь, вам нужно что-то вроде этого:

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> 
+0

OP использует SQL Server, а не MySql – peterm

0

Вы должны найти инструкцию SQL MERGE.

Он позволяет выполнять UPSERT - то есть INSERT, если значение ключа еще не существует, UPDATE, если ключ существует.

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

Однако, ваше требование, чтобы проверить значение ключа в 2-х местах, прежде чем выполнить обновление делает его более сложным. Я не пробовал это, но я бы подумал, что VIEW или CTE можно использовать для установления, существует ли идентификатор в обеих ваших таблицах &, а затем основывать MERGE на CTE/VIEW.

Но обязательно начните с просмотра MERGE!

Смежные вопросы