web-dev-qa-db-fra.com

SQL UPDATE TOP () ou UPDATE avec SELECT TOP

J'ai quelques milliers d'enregistrements et je dois les mettre à jour par lots de 350 enregistrements.

J'aimerais savoir s'il y a une différence entre les deux instructions de mise à jour ci-dessous et si l'une d'entre elles fonctionnerait plus rapidement, utilisez moins de ressources de base de données, etc.

Déclaration 1:

UPDATE TOP (350) database1
SET value1 = '', value2 ='', value3 = ''
WHERE value1 = '123'

Affirmation 2:

    UPDATE database1
    SET value1 = '', value2 ='', value3 = ''
    WHERE ID in 
       (SELECT TOP 350 ID FROM database1
       WHERE value1 = '123')
4
Rudixx

La première déclaration sera plus rapide. Mais les 150 meilleurs enregistrements sont choisis au hasard. Les enregistrements mis à jour dans les deux requêtes peuvent ne pas être identiques. Puisque vous crivez les mises à jour par lots, votre approche peut ne pas mettre à jour tous les enregistrements. 

Je vais le faire en utilisant l'approche suivante cohérente que votre approche. 

;WITH cte
     AS (SELECT TOP (350) value1,
                          value2,
                          value3
         FROM   database1
         WHERE  value1 = '123'
         ORDER  BY ID -- or any other column to order the result 
        )
UPDATE cte
SET    value1 = '',
       value2 = '',
       value3 = '' 

De plus, vous n'avez pas à vous soucier de la taille du journal des transactions lors de la mise à jour quelques milliers d'enregistrements il n'y a pas besoin de lots ici

3
Pரதீப்

Filtrez les données de la base de données1 puis joignez-vous par identifiant. Les méthodes ci-dessous sont plus réalistes pour la sélection et la mise à jour des données.

UPDATE database1 
    SET value1 = '', value2 ='', value3 = ''
    FROM (
        SELECT top 350 ID
        FROM database1
        WHERE value1 = '123'
        ) as db1
    WHERE db1.ID = database1.ID
0
jainvikram444