我正在尝试比较来自两个系统的数据。基本思想是:
- 创建临时表。
- 插入表 1 数据。
- 插入 Table2 数据(表是一个链接的远程服务器),并尊重 UNIQUE Id。
- 过滤第一个或第二个表具有不同信息的位置。
我正在尝试从第二个系统获取第二组插入,以插入,如果重复,则改为更新。我似乎无法正确处理。对于最后的插入,我应该有什么?
我没有“过滤器部分”,因为我没有插入 Table2 数据。过滤器部分将显示两个系统之间活动、姓氏或名字不同的行。简单where Table1LastName <> Table2LastName
的类型语句。
注意:我已经创建了 2 个临时表......以及一个完整的外部连接和一些“其中 ID 为空”。我只是想让它以我以前从未使用过的方式工作。
if object_id('tempdb..#CompareDrs') is not null
drop table #CompareDrs;
GO
create table #CompareDrs
(
ID varchar(20) unique
,TABLE1Active varchar(1)
,TABLE1LastName varchar(50)
,TABLE1FirstName varchar(50)
,TABLE2Active varchar(1)
,TABLE2LastName varchar(50)
,TABLE2FirstName varchar(50)
);
GO
INSERT INTO #CompareDrs (ID, TABLE1Active, TABLE1LastName, TABLE1FirstName)
SELECT
right('00000000000000000000' + ForeignID, 20) ID
,case when Active = 0 then 'I'
when Active = 1 then 'A'
else ' '
end TABLE1Active
,LastName TABLE1LastName
,FirstName TABLE1FirstName
FROM
[DATABASE1].dbo.DRs
Order By
ID;
GO
INSERT Into #CompareDrs (ID, TABLE2Active, TABLE2LastName, TABLE2FirstName)
SELECT
right('00000000000000000000' + Cast(DRDR# as Varchar(50)), 20) ID
,DRAFLG TABLE2Active
,DRLNAM TABLE2LastName
,DR1NAM TABLE2FirstName
FROM
[LINKEDERVER].[DATABASE].[CATALOG].[TABLE] DR
ON DUPLICATE KEY UPDATE TABLE2Active = VALUES(TABLE2Active),
TABLE2LastName = VALUES(TABLE2LastName),
TABLE2FirstName = VALUES(TABLE2FirstName),
GO
SELECT * FROM #CompareDrs;
如果您使用的是 SQL 2008,请查看MERGE语句,它可以执行其他平台称为 UPSERT 的操作,如果存在则为 UPDATE,否则为 INSERT。
您可以编写一个 SELECT 语句来捕获从第一次插入到临时表中的 id。
然后只需从第二个表中插入,除非 id 包含在您之前的 SELET 语句中。使用 ELSE 语句将其他行实现为 UPDATE
看起来您正在将两个表中的匹配行放入另一个表的单行中。
如果是这种情况,那么您需要
我可能错了,因为我并不完全清楚两张桌子上的身份证号码是否匹配。