mardi 10 août 2010

Sql Serveur - Delete avec jointure

Afin d'éviter les jointures, la façon simple et la plus courante d'éviter les jointures reste encore l'utilisation d'une sous requête (ex ci-dessous).
declare @CnkNr varchar( 10 )
select @CnkNr = '1766625'

delete from Article.ExpDateLotNrs where ArtID in (
  select ArtID 
  from Article.Articles a 
  where a.CnkNr =  @CnkNr
)

L'utilisation d'une sous-requête (ex ci-dessus) est peu efficace si le résultat de la sous-requête retourne un ensemble de donnée important.
Dans d'autres cas, il peut être nécessaire d'utiliser une jointure sur plusieurs tables avant de connaître les enregistrements à effacer.
Il est alors nécessaire d'effectuer une opération "delete" sur base d'une jointure.

Tout comme l'update avec jointure, la syntaxe du Delete avec jointure est un peu particulière:
declare @CnkNr varchar( 10 )
select @CnkNr = '1766625'

delete from Article.ExpDateLotNrs 
FROM Article.ExpDateLotNrs L
inner join Article.Articles a on a.ArtID = l.ArtID and a.CnkNr =  @CnkNr

Aucun commentaire: