1

修正したい SQL ステートメントがあります。現状では、単純な SELECT INTO を実行していますが、それを変更して、目的のテーブルに存在しないレコード (基準によって決定された) のみが追加されるようにしたいと考えています。

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

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

投票がまだ存在しない場合にのみ StagingTable が設定されるように変更したいと思います。これは受け入れられる方法ですか、それともより良い代替手段はありますか?

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

2 に答える 2

2

SELECT...INTO構文を使用して新しいテーブルを作成することを除いて、あなたのテクニックは良さそうです。代わりに、以下のコードを使用して、既存のテーブルに行を追加します。

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)
于 2010-10-13T20:28:38.890 に答える
1

SELECT INTO既存のテーブルにデータを挿入するのではなく、新しいテーブルを作成します。このため、テーブルが存在するかどうかを確認してから、既存の SQL を実行する前にテーブルを削除します。これにより、StagingTable が毎回削除され、再作成されることが保証されます。

    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 INTOJoe Stefanelli の回答に従って使用する必要があります。

于 2010-10-13T20:30:47.560 に答える