2016-04-13 5 views
2

Ich habe eine Tabelle (tblEntities), die die folgenden Spalten enthält: ID (Identität) BEDEUTUNG (varchar) START_DATE (Datetime) STOP_DATE (DateTime, Nullwerte zulassen)INSERT neue Zeilen in der Tabelle aus einer Liste von Werten, wenn sie nicht bereits existieren

Ich habe eine lange Liste von Werten, die ich dieser Tabelle hinzufügen möchte. Diese Liste wird erhalten durch eine andere Tabelle abfragt (tblOther):

SELECT ITEMNAME 
FROM tblOther 
GROUP BY ITEMNAME 

So für jeden oben von der Abfrage generierten Artikel mag ich:

  • eine neue Zeile Einfügen mit ITEMNAME aus der Abfrage oben mit dahin in dem tblEntities Tisch, wenn es die START_DATE als ‚1/1/1900‘ existiert Stellen nicht bereits in der Tabelle
  • die STOP_DATE als das aktuelle Datum einstellen

Wie kann ich das erreichen? Geht es darum, ein WHERE IN aus der Liste zu verwenden oder muss ich eine Funktion zum Durchschleifen erstellen?

Danke für die Hilfe,

+1

JOIN verwenden Es ist eine Frage der Verwendung von ' WHERE NICHT EXISTS() ' –

+1

MERGE kann es besser tun https://msdn.microsoft.com/en-us/library/bb510625.aspx –

Antwort

4

Sie diese Abfrage verwenden könnte,

INSERT INTO tblEntities (Meaning, Start_Date, Stop_Date) 
SELECT DISTINCT(ItemName), '1900-01-01', getdate() 
FROM tblOther 
WHERE tblOther NOT IN (SELECT DISTINCT(Meaning) FROM tblEntities) 

Oder für noch mehr Abfrage optimiert, könnten Sie LINKS

INSERT INTO tblEntities (Meaning, Start_Date, Stop_Date) 
SELECT DISTINCT(ItemName), '1900-01-01', getdate() 
FROM tblOther O 
LEFT JOIN tblEntities E ON E.Meaning = O.ItemName 
WHERE O.ItemName IS NULL 
Verwandte Themen