更新存储的 proc 传递给 proc 的任何字段,而让其他人独自一人

kac*_*apy 4 sql-server-2005 stored-procedures

我有一个执行简单更新的存储过程(见下文)。

我只想更新传递的字段,而不是那些为空的字段。也就是说,如果我没有得到某个参数的参数值,我不想将表数据更新为 null,而是保留当前值。

这可以在这样的 sql 更新语句中完成吗?

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
Run Code Online (Sandbox Code Playgroud)

San*_*ddy 10

如果我理解正确的话,如下所示。

UPDATE MessageDetail   
        SET 
            IsDraft = ISNULL (@IsDraft, IsDraft), 
            IsPreviewed = ISNULL (@IsPreviewed,  IsPreviewed),
            IsRead = ISNULL (@IsRead, IsRead), 
            IsFlagged = ISNULL (@IsFlagged, IsFlagged), 
            IsDeleted = ISNULL(@IsDeleted, IsDeleted)
            IsArchived = ISNULL(@IsArchived, IsArchived)
        WHERE MessageId = @MessageId
Run Code Online (Sandbox Code Playgroud)

  • 以上是可以的,只要这些列上没有任何非聚集索引,就不会产生大量开销。如果有他们,你也在做一个额外的 IO。否则,您可以在此处使用动态 sql 或大量复杂的 if else 语句。 (2认同)