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; 
+0

你好lad2025,查询工作。但是,如果数据库被删除,如何从DatabaseOnServer删除记录。 示例:我有一个名为ABC的数据库,名称和详细信息被插入到DatabaseOnServer上。我从服务器删除ABC,并且该条目仍存在于DatabaseOnServer中。该记录应被删除 – Tango

+1

@Tango这应该是全新的问题。如果你需要更多的逻辑使用'MERGE'。 – lad2025

+0

@Tango请不要以这种方式改变问题。如果您的原始问题已解决,请将其标记为已接受并提出新问题。 – lad2025