質問

修正したいSQLステートメントがあります。現状では、私は単純な選択を実行していますが、それを変更したいので、宛先テーブルに存在しないレコードのみが(私の基準で決定されています)追加されます。

これが私の最初の声明です:

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())  

舞台がまだ存在していない場合にのみステージングテーブルが入力されるように、物事を変更したいと思います。これはそれについて容認できる方法ですか、それともより良い選択肢がありますか?

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)) )
役に立ちましたか?

解決

あなたのテクニックはそれを除いてよさそうです 選択...に 構文は、新しいテーブルを作成するために使用されます。代わりに、以下のコードを使用して、既存のテーブルに行を追加する必要があります。

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)

他のヒント

SELECT INTO 既存のテーブルにデータを挿入するのではなく、新しいテーブルを作成します。このため、既存のSQLを実行する前にテーブルが存在するかどうかを確認します。舞台のテーブルが毎回ドロップされ、再作成されることを保証します。

    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()) 

既存のテーブルに行を追加する場合は、使用する必要があります INSERT INTO Joe Stefanelliの答えによると。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top