更新存储过程中的可变数量的参数

时间:2014-06-25 21:34:32

标签: sql sql-server stored-procedures coalesce

请假设以下内容:

我有一张包含约50列的表格。我收到一个导入文件,其中包含需要在可变数量的这些列中更新的信息。是否有通过存储过程的方法,我只能更新需要更新的列,其余的保持其当前值不变。请记住,我并不是说未受影响的列会返回某个默认值,但实际上会保留存储在其中的当前值。

非常感谢您对此的任何回应。

COALESCE可以在这里应用,正如我在这篇帖子中所读到的那样:Updating a Table through a stored procedure with variable parameters

或者我正在研究一种更类似于此处所解释的方法: SQL Server stored procedure with optional parameters updates wrong columns

为了记录我的sql技能相当薄弱,我刚开始潜入游泳池的这一端

JD

1 个答案:

答案 0 :(得分:1)

是的,您可以使用COALESCE执行此操作。基本上,如果参数以NULL形式传递,那么它将使用原始值。以下是您可以适应的一般模式。

DECLARE @LastName NVARCHAR(50) = 'John'
DECLARE @FirstName NVARCHAR(50) = NULL;
DECLARE @ID INT = 1;

UPDATE dbo.UpdateExample
SET LastName = COALESCE(@LastName, LastName), FirstName = COALESCE(@FirstName, FirstName), 
WHERE ID = @ID

另外,请阅读本文,标题为:非更新更新的影响

http://web.archive.org/web/20180406220621/http://sqlblog.com:80/blogs/paul_white/archive/2010/08/11/the_2D00_impact_2D00_of_2D00_update_2D00_statements_2D00_that_2D00_don_2D00_t_2D00_change_2D00_data.aspx

基本上, “SQL Server包含许多优化,以避免在处理不会导致持久数据库发生任何更改的UPDATE操作时出现不必要的日志记录或页面刷新。”