2010-10-22 5 views
4

Je dois insérer des données dans la table mais seulement si elle n'existe pas déjà.SQL Server IF EXISTS

Je vérifie pour les lignes existantes en utilisant:

IF EXISTS (SELECT 'X' FROM Table1 where id = @id) 

Est-ce que l'utilisation de 'X' améliorer la performance au lieu d'utiliser un nom de colonne?

Répondre

0

C'est probablement une différence négligeable. Je pense que le "modèle" le plus commun que j'ai vu est de simplement sélectionner 1 quand vous vérifiez juste l'existence, mais je ne m'inquiéterais pas trop.

select 1 from Table1... 
8

Non, vous pouvez utiliser *, nom de colonne, NULL ou même 1/0.

Selon la norme ANSI, il ne doit pas être évalué. Page 191 ANSI SQL 1992 Standard.

* est mentionné dans MSDN

Cependant, une meilleure façon est d'utiliser Merge (SQL Server 2008) ou simplement attraper l'erreur. Précédent SO réponses de moi: One, Two

+0

qu'en est-il de la clé unique pour cette colonne? – anishMarokey

+0

@anishmarokey: voir mes liens vers mes autres réponses. Une clé unique en elle-même n'aide pas, mais elle permet d'essayer/attraper. Et cela implique aussi un indice qui aidera les performances – gbn

0

Une technique serait d'ajouter une contrainte unique sur la colonne. Toujours insérer un enregistrement et gérer le cas de défaillance où cet ID existait déjà dans la table.

Questions connexes