2010-05-04 6 views
2

Dans SQL Server 2008, comment mettre à jour les champs d'une table uniquement si leurs valeurs diffèrent de celles indiquées dans l'instruction update?SQL Server - mise à jour uniquement lorsque les valeurs sont différentes

Par exemple:

Je TableA avec la colonne FirstName dont la valeur est 'Roger Moore' avec un identifiant unique de '007'. Maintenant, j'appelle une instruction de mise à jour mais elle devrait mettre à jour le champ 'FirstName' seulement si la valeur est autre chose que 'Roger Moore'.

TIA

+0

Voulez-vous dire un modèle générique de SQL, ou juste un spécifique avec votre Roger Moore? – vodkhang

+0

@vodkhang - generic – SoftwareGeek

Répondre

7
update TableA 
set FirstName = 'Roger Moore' 
where ID = '007' 
    and FirstName <> 'Roger Moore' 
+0

@OrbMan - Lorsque plusieurs champs sont concernés, y aura-t-il une mise à jour d'autres champs lorsque l'une des valeurs de champ est la même? – SoftwareGeek

+1

@BhejaFry: non, vous ne pouvez pas mettre à jour de manière sélective des colonnes comme ça. Tout listé dans la clause 'SET' sera mis à jour si la condition' WHERE' correspond. – RedFilter

0

Parlez-vous une instruction UPDATE comme celui-ci? Cela ne tient pas compte de votre identifiant unique, mais je pense que c'est ce que vous cherchez.

1

En général, il ne vaut pas l'effort de vérification pour le changement d'un champ

http://blogs.msdn.com/queryoptteam/archive/2006/07/07/659453.aspx

Peut-être qu'il y aurait des avantages de verrouillage en faisant la mise à jour conditionnelle. Cependant, si vous insistez pour le faire, vous pouvez également faire cela en arrière-plan avec un au lieu de trigger et en comparant chacune des valeurs insérées et actuelles.

Questions connexes