当我将SQL列更新为自身时会发生什么? - 或 - 简化条件更新?

时间:2010-09-28 19:50:06

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

我想调用一个“更新”存储过程,它不一定包含所有列。 可能有更好的方法来处理这个.... 如您所见,如果我没有传入列参数,则它们的值为NULL。然后,使用ISNULL,我将列设置为新值或其现有值。

CREATE PROCEDURE [dbo].[spUpdateTable] 

 @pPKID bigint = NULL,
 @pColumn1 int = NULL, 
 @pColumn2 int = NULL

AS
BEGIN

 SET NOCOUNT ON;

 UPDATE
    TableName
 SET
    [Column1] = ISNULL(@pColumn1,[Column1]),
    [Column2] = ISNULL(@pColumn2,[Column2])

 WHERE
    [PKID] = @pPKID
END

1 个答案:

答案 0 :(得分:2)

这与更新订户上的表时事务复制存储过程基本相同。如果微软自己做,那一定是安全的,对吧? : - )

说真的,我在这里主要关心的是桌面上可能存在的任何更新触发器。您希望了解可能触发这些触发器对可能不会发生变化的影响。否则我认为你的技术很好。