none
SQL Server: problème de concurrence d'appel en t-sql? RRS feed

  • Question

  • Bonjour à tous

    J'ai l'instruction insert suivante:

    /* table avec colonne id qui est primary key */
    INSERT INTO TABLE(id)
      SELECT @new_id
      WHERE @new_id IS NOT NULL
      AND NOT EXISTS (
        SELECT NULL
        FROM TABLE
        WHERE id = @new_id)

    J'ai aléatoirement (et non à chaque appel de l'instruction), des erreurs pour violation de primary key.

    Comment est-il possible que la clause "where not exists" soit respectée car @new_id n'est pas trouvé et que l'insert plante parcequ'il y a déjà id=@new_id dans la table!!!??? Je ne comprends pas du tout...
    Est-ce un problème de concurrence d'appel? Quelle solution avons nous à notre disposition pour éviter cela?

    En vous remerciant, Thomas

    jeudi 8 août 2013 13:08

Réponses

  • Bonjour,

    Le "with(tablockx)" règle effectivement le problème mais a également une incidence sur les performances. La performance étant la priorité nous allons nous allons utiliser le try catch.

    Merci à tous pour l'intérêt porté à mon problème.

    mardi 20 août 2013 08:12

Toutes les réponses