2010-09-30 10 views
5

Me gustaría tener un procedimiento almacenado que actualice los valores en una fila de tabla según se proporcionen o no los parámetros. Por ejemplo, tengo una situación en la que quiero actualizar todos los valores, pero también una situación en la que solo estoy obligado a actualizar dos valores. Esperaba poder hacer esto con un solo procedimiento, en lugar de escribir dos, lo que no me atrae particularmente. El mejor que he conseguido llegar a mí mismo es algo como lo siguiente:Valores establecidos condicionalmente en la instrucción UPDATE

CREATE PROCEDURE dbo.UpdatePerson 
@PersonId INT, 
@Firstname VARCHAR(50) = NULL, 
@Lastname VARCHAR(50) = NULL, 
@Email VARCHAR(50) = NULL 
AS 
BEGIN 
    SET NOCOUNT ON 

UPDATE Person 
Set 
    Firstname = COALESCE(@Firstname, Firstname), 
    Lastname = COALESCE(@LastName, Lastname), 
    Email = COALESCE(@Email, Email) 
    WHERE PersonId = @PersonId 

END 

Soy consciente de que los valores se actualizan cada vez que de todos modos, que no es lo ideal. ¿Es esta una manera efectiva de lograr esto, o podría hacerse de una manera mejor?

Respuesta

4

Creo que su código está bien. Lo único que agregaría es un cheque para el caso cuando los tres parámetros sean NULL, en cuyo caso no se debe hacer ninguna actualización.

4

SQL Server realmente tiene algo de lógica para tratar con actualizaciones que no se actualizan.

More details than you probably wanted to know!

+0

¡Artículo interesante! – RedFilter

+0

+1 Artículo útil e informativo. ¡Gracias por compartir! –

+1

Gracias Martin. Alguna información útil para saber. –

Cuestiones relacionadas