2017-08-10 14 views
1

私はERTdataという名前のテーブルを持つメインデータベースを持っていますが、データベースの名前が格納されており、このデータベースのカラムId, DatabaseName, Initiatedby, CreatedDateの後です。SQL - テーブルに挿入する場合はsys.databasesにあります

DatabasesOnServerという別のテーブルの列には、Id, DatabaseName, Initiatedby, CreatedDateがあります。サーバがすでにその上に特定のデータベースを持っており、同じことがERTdata中に存在する場合、それはテーブルDatabaseOnServerに挿入する場合

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) 

上記のクエリをチェック:

は、これが私のクエリです。

重複が発生するという問題があります。存在しない場合にのみ挿入するにはどうすればいいですか?データベースがサーバー上に存在しない場合は、DatabaseOnServerからエントリを削除してください。

ありがとうございます。

答えて

1

重複が発生するという問題があります。存在しない場合にのみ挿入する方法と、データベースがサーバーに存在しない場合は、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; 

EDIT:データベースが削除される場合

しかし、どのように私は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

@タンゴこれはまったく新しい質問でなければなりません。より多くのロジックが必要な場合は、 'MERGE'を使用してください。 – lad2025

+0

@タンゴそのように質問を変更しないでください。あなたの元の質問が解決したら、合格とマークして新しい質問をしてください。 – lad2025

関連する問題