(sql server)にselectを実行する前に行の存在を確認する
-
30-09-2019 - |
質問
修正したい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の答えによると。
所属していません StackOverflow