请假设以下内容:
我有一张包含约50列的表格。我收到一个导入文件,其中包含需要在可变数量的这些列中更新的信息。是否有通过存储过程的方法,我只能更新需要更新的列,其余的保持其当前值不变。请记住,我并不是说未受影响的列会返回某个默认值,但实际上会保留存储在其中的当前值。
非常感谢您对此的任何回应。
COALESCE可以在这里应用,正如我在这篇帖子中所读到的那样:Updating a Table through a stored procedure with variable parameters
或者我正在研究一种更类似于此处所解释的方法: SQL Server stored procedure with optional parameters updates wrong columns
为了记录我的sql技能相当薄弱,我刚开始潜入游泳池的这一端
JD
答案 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
另外,请阅读本文,标题为:非更新更新的影响
基本上, “SQL Server包含许多优化,以避免在处理不会导致持久数据库发生任何更改的UPDATE操作时出现不必要的日志记录或页面刷新。”