SQL Server 2012:在更新之前将t1.field1值与t2.field1值进行比较

时间:2017-07-11 02:48:41

标签: sql sql-server-2012

我有table1,它有我的初始记录。我的table2包含与table1相同的表格结构。 Table2个事务用于更新table1个值。

为了说明我想要做的事情,我有这个代码,当它们为null时,它可以很好地用于字段:

UPDATE TABLE1
SET FIELD1 = CASE WHEN T1.FIELD1 = '' THEN t2.FIELD1 ELSE T1.FIELD1 END,
    FIELD2 = CASE WHEN T1.FIELD2 = '' THEN T2.FIELD2 ELSE T1.FIELD2 END,
    FIELD3 = CASE WHEN T1.FIELD3 = '' THEN T2.FIELD3 ELSE T1.FIELD3 END,
FROM TABLE1 T1 
JOIN TABLE2 T2 ON T1.COMMONFIELD = T2.COMMONFIELD
GO

但是有没有办法做同样的事情,但是将t1.field1值与t2.field1值进行比较并使用相同的逻辑?这将是具有类似代码的概念:

UPDATE TABLE1
SET FIELD1 = CASE WHEN T1.FIELD1 > t2.field1 THEN t2.FIELD1 ELSE T1.FIELD1 END,
    FIELD2 = CASE WHEN T1.FIELD2 < t2.field2 THEN T2.FIELD2 ELSE T1.FIELD2 END,
    FIELD3 = CASE WHEN T1.FIELD3 = '' THEN T2.FIELD3 ELSE T1.FIELD3 END,
FROM TABLE1 T1 
JOIN TABLE2 T2 ON T1.COMMONFIELD = T2.COMMONFIELD
GO

我希望能够将t1.field-n值与t2.field-n值进行比较,其中每个值在更新之前都有自己的比较标准。如果不是这种方法,可以用另一种方式使用T-SQL吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

这不是一个完全答案,但我希望您的第一个查询是:

UPDATE T1
    SET FIELD1 = COALESCE(T2.FIELD1, T1.FIELD1),
        FIELD2 = COALESCE(T2.FIELD2, T1.FIELD2),
        FIELD3 = COALESCE(T2.FIELD3, T1.FIELD3)
FROM TABLE1 T1 JOIN
     TABLE2 T2
     ON T1.COMMONFIELD = T2.COMMONFIELD;

TABLE1中的相应字段为TABLE2时,这将更新NOT NULL。我不确定你的问题的其余部分是什么,但你也可以让第一个查询做一些合理的事情。

答案 1 :(得分:0)

我不确定以下内容是否会对您有所帮助:

declare @t1 table (val1 varchar(100), val2 varchar(100), common_field int)
declare @t2 table (val1 varchar(100), val2 varchar(100), common_field int)

insert into @t1 
select 'abc', 'first', 1 union select '', 'second', 2 union select 'xyz', '', 3 union select '', '', 4

insert into @t2
select '', 'NEW_FIRST', 1 union select 'NEW', 'NEW_2', 2 union select 'not_old', 'NEW_SECOND', 3 union select 'PQR_NEW', 'ALL_NEW', 4

select t1.common_field, t1.val1 val1_1, t2.val1 val1_2,
coalesce(nullif(t1.val1, ''), t2.val1) update_value_for_val1,
t1.val2 val2_1, t2.val2 val2_2,
coalesce(nullif(t1.val2, ''), t2.val2) update_value_for_val2
from @t1 t1
join @t2 t2 on t1.common_field = t2.common_field
order by 1

感谢。