![](/img/trans.png)
[英]TSQL - ROUND price to .05 and .09. UPDATE is producing NULLs?
[英]TSQL: Prevent Nulls update over existing data
我有2张桌子:
订单(表I更新并希望保留现有数据,并防止使用null覆盖)
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.