繁体   English   中英

TSQL:防止Null更新现有数据

[英]TSQL: Prevent Nulls update over existing data

我有2张桌子:

  1. 订单(表I更新并希望保留现有数据,并防止使用null覆盖)

  2. WRK_Table(此表与Orders相同,但是不能保证在运行更新时所有列都具有数据)

PK列'Master_Ordernum'表中有许多列,WRK_Table将具有PK,但其他列中的数据不能指望。

我希望WRK_Table仅使用实际数据而不是Null更新Orders。 我在考虑这一点:

UPDATE [Orders] 
SET [Status] = CASE WHEN S.[Status] IS NOT NULL THEN S.[Status] END 
FROM [WRK_TABLE] S
WHERE [Orders].[Master_Ordernum] = S.[Master_Ordernum]

订单中的现有数据正在更新为空

这有帮助吗?

update orders set name = work.name 
from orders 
inner join work on orders.id = work.id and work.Name is not null

col /表名不同,但您应该知道

编辑

您的SQL,未经测试

UPDATE Orders
SET [Status] = WRK_Table.[Status]
FROM [Orders] 
inner join WRK_Table  on [Orders].[Master_Ordernum] = [WRK_Table].[Master_Ordernum] and WRK_Table.[Status] is not null

如果要测试和撤消数据,请执行类似的操作(假设您没有100行)

begin tran

/ * ..更新的SQL ... * /

select * from orders // review the data

rollback tran // Undo changes

如果要使用Case语句,则需要包含else来防止其仅插入该null。 尝试执行此操作-如果工作表为空,则仅使用现有值覆盖该值。

UPDATE [Orders] 
SET [Status] = CASE WHEN S.[Status] IS NOT NULL THEN S.[Status] else [Orders].[Status] END 
FROM [WRK_TABLE] S
WHERE [Orders].[Master_Ordernum] = S.[Master_Ordernum]

不确定是否可以使用

Update my_table set col = ISNULL(@newval,@existingval) where id=@id

https://msdn.microsoft.com/en-us/library/ms184325.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM