gpt4 book ai didi

sql - 插入或更新时的 T SQL 循环

转载 作者:行者123 更新时间:2023-12-02 05:39:02 26 4
gpt4 key购买 nike

我有两个表。

表 A 和表 B。列相同。

create table TableA (
id int
, name varchar
, last datetime
)

create table TableB (
id int
, name varchar
, last datetime
)

我正在用大量数据填充表 A。我想将表 A 中的数据插入或更新到表 B 中。

我想从表 A 中获取数据,如果 ID 和名称不匹配则插入表 B,如果 ID 和名称匹配则更新。

我尝试了一些 ETL 工具,但结果非常慢。我在 id 和 name 上建立了索引,我想用 SQL 试试这个。

我有以下但不能正常工作:

SELECT      @id = ID, 
@name = name,
@LSDATE = LastSeen_DateTime
FROM DBO.A
IF EXISTS (SELECT ID, name FROM DBO.A
WHERE @ID = ID AND @name = Name)

开始 - 更新结尾别的开始 - 插入结束

我想我需要把它放在一个循环中,但不太确定我该如何运行。

谢谢。

最佳答案

执行两个语句一个更新一个插入而不是循环可能更快

此语句使用来自 A 的 ID 相同但名称不同的数据更新所有 B 行

更新

Update 
tableB
SET
name = a.Name
From
tableB a
INNER JOIN tableA a
on b.ID = a.ID
and A.Name <> b.Name

此语句将所有 B 行插入到 A 中,其中 id 在 A 中不存在

插入

INSERT INTO
tableB
( ID,
Name
)
SELECT
a.ID
a.Name
FROM
tableA b
WHERE
not exists (Select A.ID From tableB a WHERE a.ID = b.ID)

已更新(将其从 A 反转为 B 而不是将 B 反转为 A)

关于sql - 插入或更新时的 T SQL 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4227774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com