Eu tenho um procedimento armazenado que faz uma atualização simples (veja abaixo).
quero atualizar apenas os campos passados ​​e não os nulos. ou seja, se eu não obtiver um valor parm para algo, não quero atualizar os dados da tabela para nulo, mas apenas deixar o valor atual.
isso pode ser feito em uma instrução de atualização SQL como esta?
ALTER PROCEDURE [dbo].[upd_MessageDetail]
@MessageId INT,
@IsDraft INT,
@IsPreviewed INT,
@IsRead INT,
@IsFlagged INT,
@IsDeleted INT,
@IsArchived INT
AS
BEGIN
UPDATE MessageDetail
SET
IsDraft = @IsDraft,
IsPreviewed = @IsPreviewed,
IsRead = @IsRead,
IsFlagged = @IsFlagged,
IsDeleted = @IsDeleted,
IsArchived = @IsArchived
WHERE MessageId = @MessageId
Algo como abaixo, se eu entendi corretamente.
Um adendo à resposta de Sankar Reddy é que, se você estiver usando replicação ou usando gatilhos que verificam se uma coluna foi atualizada (usando a função Update () ), pode valer a pena criar uma instrução IF .. ELSE complicada para não incluir o campo na instrução UPDATE.
especificamente do artigo do MSDN
Opções:
Verifique todas as combinações de atualização possÃveis (para que você faça apenas uma chamada de atualização para o banco de dados com largura de banda de rede mÃnima)
Permite várias chamadas de atualização atualizando cada coluna individualmente...
Analisar a declaração de atualização em uma string grande e depois executá-la
Recomendação