SQL - 插入到表格如果sys.databases中
问题描述:
已存在我有一个表中的主数据库称为ERTdata
其中存储的数据库名称,我在这个数据库中的列Id, DatabaseName, Initiatedby, CreatedDate
后。SQL - 插入到表格如果sys.databases中
我有列Id, DatabaseName, Initiatedby, CreatedDate
称为DatabasesOnServer
另一个表。
这是我的查询:
INSERT INTO DatabaseOnServer (Id, DatabaseName, Initiatedby,CreatedDate)
SELECT Id, DatabaseName, Initiatedby, CreatedDate
FROM ERTdata
WHERE EXISTS (SELECT 1
FROM sys.databases
WHERE name = ERTdata.DatabaseName)
上述查询检查服务器上已经有特定的数据库,如果同样存在于ERTdata,将其插入到表DatabaseOnServer。
的问题是它会导致重复。我们怎样才能将其插入只有当它不存在,如果该数据库不存在服务器上删除DatabaseOnServer
的条目。
谢谢提前。
答
的问题是它会导致重复。我们如何才能插入它,只要它不存在,并且数据库不存在于服务器上从DatabaseOnServer删除条目。
你可以简单地使用EXCEPT
:
INSERT INTO DatabaseOnServer (Id, DatabaseName, Initiatedby,CreatedDate)
SELECT Id, DatabaseName, Initiatedby, CreatedDate
FROM ERTdata
WHERE EXISTS (SELECT 1
FROM sys.databases
WHERE name = ERTdata.DatabaseName)
EXCEPT
SELECT Id, DatabaseName, Initiatedby, CreatedDate
FROM DatabaseOnServer;
编辑:
然而,如何从DatabaseOnServer删除记录,如果数据库被删除。示例:我有一个名为ABC的数据库,名称和详细信息被插入到DatabaseOnServer上。我从服务器删除ABC,并且该条目仍存在于DatabaseOnServer中。该记录应被删除
MERGE DatabaseOnServer AS trg
USING (SELECT Id, DatabaseName, Initiatedby, CreatedDate
FROM ERTdata
WHERE EXISTS (SELECT 1
FROM sys.databases
WHERE name = ERTdata.DatabaseName)) AS src
ON trg.Id = src.id AND trg.DatabaseName = src.Name
WHEN NOT MATCHED BY TARGET THEN
INSERT (Id, DatabaseName, Initiatedby, CreatedDate)
VALUES (Id, DatabaseName, Initiatedby, CreatedDate)
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
你好lad2025,查询工作。但是,如果数据库被删除,如何从DatabaseOnServer删除记录。 示例:我有一个名为ABC的数据库,名称和详细信息被插入到DatabaseOnServer上。我从服务器删除ABC,并且该条目仍存在于DatabaseOnServer中。该记录应被删除 – Tango
@Tango这应该是全新的问题。如果你需要更多的逻辑使用'MERGE'。 – lad2025
@Tango请不要以这种方式改变问题。如果您的原始问题已解决,请将其标记为已接受并提出新问题。 – lad2025