Frage

ich eine SQL-Anweisung haben Ich mag würde zu ändern. Wie es steht nun eine einfache SELECT INTO Ich laufe aber ich möchte es so modifizieren, nur Datensätze, die in der Zieltabelle nicht existieren (wie durch meine Kriterien bestimmt) angehängt werden.

Hier ist meine erste Aussage:

SELECT b.BallotID, m.MeetingDate
    INTO StagingTable
    FROM Ballot INNER JOIN Meeting on b.MeetingID = m.MeetingID
    WHERE b.LastModifiedDate < '01-01-2010' AND ( b.BallotType = 'Agenda Vote' AND m.MeetingDate < GETDATE())  

würde ich gerne Dinge so ändern, dass die StagingTable nur bevölkert wird, wenn die Abstimmung nicht bereits vorhanden ist. Ist dies ein akzeptabler Weg, um darüber zu gehen, oder gibt es bessere Alternativen?

SELECT b.BallotID, m.MeetingDate
    INTO StagingTable
    FROM Ballot INNER JOIN Meeting on b.MeetingID = m.MeetingID
    WHERE b.LastModifiedDate < '01-01-2010' AND ( b.BallotType = 'Agenda Vote' AND m.MeetingDate < GETDATE())   
    AND NOT EXISTS(SELECT 1 from StagingTable where BallotID = b.BallotID)) )
War es hilfreich?

Lösung

Ihre Technik sieht gut aus, außer dass die SELECT ... INTO Syntax wird verwendet, um eine brandneue Tabelle zu erstellen. Stattdessen würden Sie wollen, um den Code verwenden, unter Reihen zu einer vorhandenen Tabelle hinzuzufügen:

INSERT INTO StagingTable
    (BallotID, MeetingDate)
    SELECT b.BallotID, m.MeetingDate
        FROM Ballot b
            INNER JOIN Meeting m
                on b.MeetingID = m.MeetingID
        WHERE b.LastModifiedDate < '01-01-2010' 
            AND (b.BallotType = 'Agenda Vote' AND m.MeetingDate < GETDATE())   
            AND NOT EXISTS(SELECT 1 from StagingTable where BallotID = b.BallotID)

Andere Tipps

SELECT INTO erstellt eine neue Tabelle, anstatt Einfügen von Daten in einer vorhandenen Tabelle. Aus diesem Grunde würde ich prüfen, ob die Tabelle vorhanden ist, wenn er dann die Tabelle nicht löschen, bevor Sie Ihre vorhandene SQL ausgeführt wird. Das stellt sicher, dass die StagingTable fallen gelassen wird und jedes Mal neu erstellt werden.

    IF OBJECT_ID('StagingTable','U') IS NOT NULL
    BEGIN
         DROP TABLE StagingTable
    END


        SELECT b.BallotID, m.MeetingDate
        INTO StagingTable
        FROM Ballot INNER JOIN Meeting on b.MeetingID = m.MeetingID
        WHERE b.LastModifiedDate < '01-01-2010' AND ( b.BallotType = 'Agenda Vote' 
        AND m.MeetingDate < GETDATE()) 

Wenn Sie Zeilen in die bestehenden Tabelle hinzufügen möchten, dann sollten Sie INSERT INTO per Joe Stefanelli Antwort verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top