sql - 如何更新 SQL 中的选择性字段(保留一些不变)?

标签 sql tsql parameterized

我想更新具有两个日期的记录,如果我没有要更新的新值,则保留现有数据不变。

这是一个示例表记录:

id  last_foo    last_bar
--  ----------  ----------
 1  2010-05-30  2010-05-30

我正在使用的查询:
UPDATE sampledates
   SET last_foo = @LastFoo, 
       last_bar = @LastBar
 WHERE id = @ID;

如果我的 可为空的日期时间 LastFooLastBar为空,我想保留现有的 SQL 值,否则更新。

例如,假设我正在使用以下值更新此记录(这是 C#,但适用任何语言):
DateTime? LastFoo = new DateTime('2010-06-04');
DateTime? LastBar = null;

我希望记录是:
id  last_foo    last_bar
--  ----------  ----------
 1  2010-06-04  2010-05-30

我意识到如果值为空,我可以更改我的查询文本以省略第二列,但我想知道是否有一种方法可以让查询保持原样并指定我不更改指定的列。

最佳答案

尝试

UPDATE sampledates
SET last_foo = COALESCE(@LastFoo,last_foo ), 
last_bar = COALESCE(@LastBar,last_bar )
WHERE id = @ID;

关于sql - 如何更新 SQL 中的选择性字段(保留一些不变)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2978008/

相关文章:

mysql - sql查询查找复式

java derby 连接到服务器本地主机时出错 1527

python - 选择订阅特定用户但该用户未订阅的所有用户

php - 通过 PHP + HTML 从 MySQL 数据库中选择数据创建表

sql-server - 从 getdate() 中提取日期格式

sql - 如何处理 DATEDIFF 比较中的 NULL?

sql - 如何在 SQL Server 中对别名列执行 GROUP BY?

java - 使用 java.util.Map 时出现编译问题

java类型安全:not parameterized generic type effect on performance

java - Junit 参数化的结果错误