如果存储过程中的参数为null,则不更新列

时间:2011-06-17 19:50:49

标签: sql sql-server-2008 stored-procedures

我有以下存储过程。

每当@Logo为空时,将删除当前值。如果Logo@Logo,我不想更新NULL的值。

IF OBJECT_ID ('kii.p_UpdateDocumentStyle') IS NOT NULL
   DROP PROCEDURE kii.p_UpdateDocumentStyle
GO

CREATE PROCEDURE kii.p_UpdateDocumentStyle
   @DocumentId AS INT,
   @TitleForegroundColor AS NVARCHAR(10),
   @TitleBackgroundColor AS NVARCHAR(10),
   @TitleFontFamily AS NVARCHAR(50),
   @TitleFontSize AS NVARCHAR(10),
   @TitleFontStyle AS NVARCHAR(10),
   @TitleFontWeight AS NVARCHAR(10),
   @TitleTextDecoration AS NVARCHAR(15),
   @SectionTitleForegroundColor AS NVARCHAR(10),
   @SectionTitleBackgroundColor AS NVARCHAR(10),
   @SectionTitleFontFamily AS NVARCHAR(50),
   @SectionTitleFontSize AS NVARCHAR(10),
   @SectionTitleFontStyle AS NVARCHAR(10),
   @SectionTitleFontWeight AS NVARCHAR(10),
   @SectionTitleTextDecoration AS NVARCHAR(15),
   @ParagraphForegroundColor AS NVARCHAR(10),
   @ParagraphBackgroundColor AS NVARCHAR(10),
   @ParagraphFontFamily AS NVARCHAR(50),
   @ParagraphFontSize AS NVARCHAR(10),
   @ParagraphFontStyle AS NVARCHAR(10),
   @ParagraphFontWeight AS NVARCHAR(10),
   @ParagraphTextDecoration AS NVARCHAR(15),
   @Logo AS Image = NULL
AS

UPDATE kii.DocumentStyle
SET 
    TitleForegroundColor = @TitleForegroundColor,           
    TitleBackgroundColor = @TitleBackgroundColor,           
    TitleFontFamily = @TitleFontFamily,             
    TitleFontSize = @TitleFontSize,                 
    TitleFontStyle = @TitleFontStyle,                   
    TitleFontWeight = @TitleFontWeight,             
    TitleTextDecoration = @TitleTextDecoration,         
    SectionTitleForegroundColor = @SectionTitleForegroundColor, 
    SectionTitleBackgroundColor = @SectionTitleBackgroundColor, 
    SectionTitleFontFamily = @SectionTitleFontFamily,           
    SectionTitleFontSize = @SectionTitleFontSize,           
    SectionTitleFontStyle = @SectionTitleFontStyle,         
    SectionTitleFontWeight = @SectionTitleFontWeight,           
    SectionTitleTextDecoration = @SectionTitleTextDecoration,       
    ParagraphForegroundColor = @ParagraphForegroundColor,       
    ParagraphBackgroundColor = @ParagraphBackgroundColor,       
    ParagraphFontFamily = @ParagraphFontFamily,         
    ParagraphFontSize = @ParagraphFontSize,             
    ParagraphFontStyle = @ParagraphFontStyle,               
    ParagraphFontWeight = @ParagraphFontWeight,         
    ParagraphTextDecoration = @ParagraphTextDecoration,     
    Logo = @Logo                            
WHERE
    DocumentId = @DocumentId
GO

GRANT EXECUTE on kii.p_UpdateDocumentStyle TO p_role_kii
GO

2 个答案:

答案 0 :(得分:16)

修改你的行

Logo = COALESCE(@logo, Logo)

COALESCE会为Logo分配一个值:@logo如果已填充,否则会分配Logo的现有值

答案 1 :(得分:2)

您应该能够使用案例陈述:

Logo = CASE WHEN (@Logo is null) 
            THEN Logo
       ELSE @Logo
     END