我需要从另一个表更新一个表中的值,如果不存在,则必须将其插入。所以我在here
中看到了这个例子UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
INSERT INTO Table1 VALUES (...)
现在我想这样做,但是我需要检查列是否与另一个表匹配,而不是使用带值的where子句。
类似
UPDATE t1
SET
t1.status = t2.status
FROM
table1 t1, table2 t2
WHERE t1.reference = t2.reference and t1.section = t2.section
我认为这在性能方面非常糟糕,我想听听其他建议。
编辑
也请,如果可以的话,我想听听为什么您提供的方法比使用合并或连接更好。非常感谢。
结果
这是我在检查合并后的性能与更新之间的差额之后再插入并尝试测试所有人的方法,这是我决定的方法,基本上使用了每个人的答案
UPDATE C
SET
C.ConsumoWeek01 = M.ConsumoWeek01
FROM
Consumos AS C
INNER JOIN @tempTable M
ON C.Referencia = M.Referencia
AND C.UAP = M.UAP
INSERT INTO
Consumos
SELECT *
FROM @tempTable M
WHERE NOT EXISTS
(
SELECT 1 FROM Consumos C
WHERE C.Referencia = M.Referencia
AND C.UAP = M.UAP
)
答案 0 :(得分:1)
尝试一下
UPDATE t1
SET
t1.status = t2.status
FROM
table1 t1
WHERE NOT EXISTS (SELECT 1 FROM table2 t2
WHERE t1.reference = t2.reference
and t1.section = t2.section )
答案 1 :(得分:1)
不存在
UPDATE t1
SET
t1.status = t2.status
FROM
table1 t1 where not exists( select 1 from table2 t2 where t1.=ref=t2.ref and t1.section=t2.secction)
答案 2 :(得分:1)
使用合并语句:
MERGE INTO Table1 T1
USING
(
SELECT * FROM Table2
) T2
ON
(
T1.reference = T2.reference AND
T1.section = T2.section
)
WHEN MATCHED THEN
--UPDATE STATEMENT
WHEN NOT MATCHED THEN
--INSERT STATEMENT
答案 3 :(得分:1)
您的方法很好,只需使用标准的显式join
语法而不是用逗号分隔的旧样式即可:
update t1
set . . .
from table t1 inner join
table t2
on t1.reference = t2.reference and t1.section = t2.section;