SQL Server:更新表中的单个列

时间:2013-11-25 19:19:41

标签: sql sql-server stored-procedures updates

我有一个包含20多列的大型表格,我只需更新4列,其余部分保持不变。

有没有办法用存储过程实现这一点而不必传递所有列的值?我正在寻找一些说明不要更改此列并保持其内容的内容

我的存储过程看起来像这样(col1是由系统设置的自动递增ID):

CREATE PROCEDURE [dbo].[MySP]
    @col1 int,
    @col2 nvarchar(20),
    @col9 nvarchar(20),
    @col10 nvarchar(100)
AS
BEGIN
    SET NOCOUNT ON;
    UPDATE  MyTable
    SET col2 = @col2,
        col9 = @col9,
        col10 = @col10
    WHERE   col1 = @col1
END

感谢您对此提供任何帮助,Tim。

1 个答案:

答案 0 :(得分:2)

或者,如果每次都有四个不同的列,那么你需要这样的东西..

CREATE PROCEDURE [dbo].[MySP]
@col1 int = null,
@col2 nvarchar(20) = null,
@col3 nvarchar(20) = null,
@col4 nvarchar(20) = null,
.
.
@col20 nvarchar(100) = null

AS
BEGIN
    SET NOCOUNT ON;
    UPDATE  MyTable
    SET  col2 = CASE WHEN @col2 IS NULL THEN col2 ELSE @col2 END
        ,col3 = CASE WHEN @col3 IS NULL THEN col3 ELSE @col3 END
        ,col4 = CASE WHEN @col4 IS NULL THEN col4 ELSE @col4 END
        ,....... 
        ,col20 = CASE WHEN @col20 IS NULL THEN col20 ELSE @col20 END
    WHERE   col1 = @col1
END