2009-04-20 16 views
9

Me pregunto si es posible tener múltiples comandos de actualización en un procedimiento de almacenamientoinstrucciones de actualización múltiples en un solo StoredProcedure

Algo como esto:

Update Table1 set field1 = @new_value where id = @table1_id 

Update Table2 set field2 = @new_value where id = @table2_id 

Update Table3 set field3 = @new_value where id = @table3_id 

En este momento les estoy ejecutando por separado pero a medida que solo se usan juntos, me pregunto si podrían ubicarse en solo un SP.

+1

esta es una razón para usar procedimientos almacenados, agregar una transacción y manejo de errores y tiene una buena solución –

Respuesta

22

sí, es posible:

CREATE PROCEDURE prc_update (@table1_id INT, @table2_id INT, @table3_id INT, @new_value INT) 
AS 
BEGIN 
     UPDATE Table1 
     SET  field1 = @new_value 
     WHERE id = @table1_id 

     UPDATE Table2 
     SET  field2 = @new_value 
     WHERE id = @table2_id 

     UPDATE Table3 
     SET  field3 = @new_value 
     WHERE id = @table3_id 
END 
+0

wow que es un poco embarazoso, por supuesto intenté esto y seguí recibiendo errores de sintaxis y de alguna manera saqué la conclusión de que no era posible de esta manera, ¡lo probé de nuevo y funciona perfecto! Gracias :) –

+0

@El verdadero napster: ¿marcarías la respuesta de Quassnoi como respuesta? Gracias. – Sung

8

Sí, que trabaja muy bien.

también poner esto en el procedimiento almacenado antes de las actualizaciones:

set nocount on 

Esto mantiene los procedimientos almacenados desde la creación de conjuntos de resultados de consultas sin resultado. De lo contrario, cada actualización producirá un conjunto de resultados vacío que se envía de vuelta al cliente.

6

Debe ajustar esas declaraciones en las transacciones para que si se produce un error, todas se retrotraigan.

Cuestiones relacionadas