Я новичок в использовании хранимых процедур, что лучше всего обновить и вставить с помощью хранимых процедур. У меня есть две таблицы, и я могу сопоставить их с помощью отдельного идентификатора, я хочу обновить, если 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>
OP использует SQL Server, а не MySql – peterm
Вы должны найти инструкцию SQL MERGE.
Он позволяет выполнять UPSERT - то есть INSERT, если значение ключа еще не существует, UPDATE, если ключ существует.
http://technet.microsoft.com/en-us/library/bb510625.aspx
Однако, ваше требование, чтобы проверить значение ключа в 2-х местах, прежде чем выполнить обновление делает его более сложным. Я не пробовал это, но я бы подумал, что VIEW или CTE можно использовать для установления, существует ли идентификатор в обеих ваших таблицах &, а затем основывать MERGE на CTE/VIEW.
Но обязательно начните с просмотра MERGE!
- 1. Сохраненные процедуры Вставка проблем
- 2. Сохраненные процедуры и обновление EDMX
- 3. Сохраненные процедуры и функции
- 4. Сохраненные процедуры и PDO
- 5. Вставка или обновление хранимой процедуры
- 6. Сохраненные процедуры и формы PHP
- 7. Сохраненные процедуры базы данных
- 8. Сохраненные процедуры Vs. Просмотров
- 9. Сохраненные процедуры MSSQL2005
- 10. Сохраненные процедуры обратного проектирования
- 11. Сохраненные процедуры против Linq2Entities
- 12. Сохраненные процедуры в Hive
- 13. CLR Сохраненные процедуры
- 14. Сохраненные процедуры в Python
- 15. Сохраненные процедуры в EF4.4
- 16. Linq2Sql vs Сохраненные процедуры
- 17. Сохраненные процедуры PHP
- 18. Сохраненные процедуры SQL Server
- 19. Сохраненные процедуры с аргументами
- 20. Пакетная вставка/обновление с использованием хранимой процедуры
- 21. Сохраненные процедуры и ОПТИМИЗАЦИЯ ДЛЯ НЕИЗВЕСТНОГО
- 22. Сохраненные процедуры и триггеры в PostgreSQL
- 23. Сохраненные процедуры и функции Ошибка типа параметра
- 24. Сохраненные процедуры и события Aurora через CloudFormation
- 25. Услуги RIA, EF и сохраненные процедуры
- 26. Сохраненные параметры процедуры и отчеты Crystal Reports
- 27. Состояние проверки хранимой процедуры SQL Server и обновление/вставка
- 28. Сохраненные процедуры в EF 6.1.3
- 29. Сохраненные процедуры против привязки параметров
- 30. Сохраненные процедуры Производительность в MySql
Вам, вероятно, не нужна хранимая процедура для этого. Прежде всего, скажите нам, какие RDBMS (MySql, SQL Server, Oracle ...) вы используете и какую версию? – peterm
Извините, я использую SQL Server 2008 – Bobcat88