J'ai une instruction SQL que je voudrais modifier. À l'heure actuelle, je lance un simple SELECT INTO mais je voudrais le modifier afin que seuls les enregistrements qui n'existent pas dans la table de destination (comme déterminé par mes critères) soient ajoutés.vérification de l'existence d'une ligne avant de faire un SELECT INTO (SQL Server)
Voilà ma déclaration initiale:
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())
Je voudrais changer les choses afin que le StagingTable est peuplé uniquement lorsque le bulletin de vote n'existe pas déjà. Est-ce une façon acceptable de s'y prendre, ou existe-t-il de meilleures alternatives?
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)))
Sans indications supplémentaires de verrouillage, vous pouvez toujours obtenir des doublons en cas de charge élevée. Voir [Question connexe] (http://stackoverflow.com/questions/3407857/only-inserting-a-row-if-its-not-already-there) –