T-SQL d'Insertion ou de mise à jour

J'ai une question concernant les performances de SQL Server.

Supposons que j'ai une table persons avec les colonnes suivantes: id, name, surname.

Maintenant, je veux insérer une nouvelle ligne dans cette table. La règle est la suivante:

  1. Si id n'est pas présent dans la table, puis insérez la ligne.

  2. Si id est présent, alors la mise à jour.

J'ai deux solutions:

Première:

update persons
  set id[email protected]p_id, name[email protected]p_name, surname[email protected]p_surname
where id[email protected]p_id
if @@ROWCOUNT = 0 
  insert into persons(id, name, surname)
  values (@p_id, @p_name, @p_surname)

Deuxième:

if exists (select id from persons where id = @p_id)
  update persons
    set id[email protected]p_id, name[email protected]p_name, surname[email protected]p_surname
  where id[email protected]p_id
else
  insert into persons(id, name, surname)
  values (@p_id, @p_name, @p_surname)

Quelle est la meilleure approche? Il semble que dans le deuxième choix, et mettre à jour une ligne, il doit être recherché à deux reprises, alors que dans la première option qui est juste une fois. Existe-il d'autres solutions à ce problème? Je suis à l'aide de MS SQL 2000.

  • pas sûr, mais je voudrais juste faire un if (COUNT (*) ) > 0), puis mise à jour pour la deuxième option
InformationsquelleAutor Markus | 2010-02-16