只将不存在的数据插入远程数据库

问题描述 投票:0回答:1

我有两个独立的 SQL Server 数据库,它们具有相同的表和列结构。我正在尝试将新数据(包括标识列)从不存在标识列的 db1 插入 db2。对于它的价值,我从源数据库运行这个查询。从最佳实践方法中不确定它是否应该从更新的目标服务器运行或者它是否重要。我有以下查询执行但不更新任何内容。不确定我的方法和指导中缺少什么,将不胜感激。

USE dbname
SET IDENTITY_INSERT Client ON;
INSERT INTO Client (ID,DNIS,Toll_Free,Greeting,Voicemail,Client,Group_Number)
SELECT ID,DNIS,Toll_Free,Greeting,Voicemail,Client,Group_Number
FROM [linkedserver].[dbname].dbo.Client
WHERE NOT EXISTS (SELECT ID from Client)
sql sql-server sql-insert
1个回答
0
投票

看起来你的查询几乎完成了,但是其中有一个错误阻止了数据的插入。这是查询的更正版本:

USE dbname;
SET IDENTITY_INSERT Client ON;
INSERT INTO Client (ID,DNIS,Toll_Free,Greeting,Voicemail,Client,Group_Number)
SELECT ID,DNIS,Toll_Free,Greeting,Voicemail,Client,Group_Number
FROM [linkedserver].[dbname].dbo.Client
WHERE ID NOT IN (SELECT ID from Client);

原始查询中的问题是 WHERE 子句中的子查询正在检查目标表中是否存在任何 ID,而不是检查源表中是否存在特定 ID。更正后的查询使用 NOT IN 运算符将源表中的 ID 与目标表中的 ID 进行比较。

就最佳实践而言,从目标服务器(即正在更新的服务器)运行查询通常是有意义的,因为这可以降低意外修改错误数据库的风险。但是,如果您确信在正确的服务器上运行查询并且已验证数据库名称和表结构相同,那么从源服务器运行查询也应该是安全的。

© www.soinside.com 2019 - 2024. All rights reserved.