У меня есть оператор SQL, который я бы хотел изменить. В настоящее время я запускаю простой SELECT INTO, но я бы хотел его изменить, поэтому добавляются только записи, которые не существуют в таблице назначения (как определено моими критериями).проверка существования строки перед выполнением SELECT INTO (SQL Server)
Вот мое первоначальное заявление:
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)))
Без дополнительных указаний на блокировку вы все равно можете получить дубликаты под большой нагрузкой. См. [Связанный вопрос] (http://stackoverflow.com/questions/3407857/only-inserting-a-row-if-its-not-already-there) –