Insert default value when parameter is null

后端 未结 16 2406
遥遥无期
遥遥无期 2020-12-24 05:27

I have a table that has a column with a default value:

create table t (
    value varchar(50) default (\'something\')
)

I\'m using a stored

16条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-24 05:43

    The pattern I generally use is to create the row without the columns that have default constraints, then update the columns to replace the default values with supplied values (if not null).

    Assuming col1 is the primary key and col4 and col5 have a default contraint

    -- create initial row with default values
    insert table1 (col1, col2, col3)
        values (@col1, @col2, @col3)
    
    -- update default values, if supplied
    update table1
        set col4 = isnull(@col4, col4),
            col5 = isnull(@col5, col5)
        where col1 = @col1
    

    If you want the actual values defaulted into the table ...

    -- create initial row with default values
    insert table1 (col1, col2, col3)
        values (@col1, @col2, @col3)
    
    -- create a container to hold the values actually inserted into the table
    declare @inserted table (col4 datetime, col5 varchar(50))
    
    -- update default values, if supplied
    update table1
        set col4 = isnull(@col4, col4),
            col5 = isnull(@col5, col5)
        output inserted.col4, inserted.col5 into @inserted (col4, col5)
        where col1 = @col1
    
    -- get the values defaulted into the table (optional)
    select @col4 = col4, @col5 = col5 from @inserted
    

    Cheers...

提交回复
热议问题