2012-10-10 10 views
5

Ich bin mit SQL Server 2008 R2Unterschied zwischen verschiedenen Schreibweisen IF Existiert?

Ich will einfach testen, wenn etwas in einer Tabelle

existiert
IF EXISTS (SELECT * FROM ta WHERE ca = 'abc') PRINT 'YES' 
IF EXISTS (SELECT ca FROM ta WHERE ca = 'abc') PRINT 'YES' 
IF EXISTS (SELECT 1 FROM ta WHERE ca = 'abc') PRINT 'YES' 
IF EXISTS (SELECT (1) FROM ta WHERE ca = 'abc') PRINT 'YES' 
IF EXISTS (SELECT TOP 1 1 FROM ta WHERE ca = 'abc') PRINT 'YES' 

Haben sie irgendwelche Unterschiede in Folge/Nebenwirkung/Leistung (egal wie klein)?

Danke

Antwort

6

Absolut kein Unterschied - die IF EXISTS(...) wird die Existenz von Zeilen überprüfen nur auf der Grundlage der WHERE Klausel in Ihrer Erklärung.

Alles andere in der Aussage ist irrelevant - macht keinen Unterschied, ob Sie SELECT * oder SELECT 1 oder oder SELECT TOP 1 * verwenden. Auch unter Verwendung SELECT * .... tut NICHT wählen Sie alle Spalten aus der Tabelle - es erneut überprüft nur auf das Vorhandensein der Daten basierend auf der WHERE Klausel.

Alle fünf Fragen haben genau die gleichen Ausführungsplan

+0

Vielen Dank! Sie implizieren also, dass diese Abfragen einige Unterschiede haben, wenn sie nicht mit IF EXISTS gepaart sind? – user1589188

+0

@ user1589188: sicher - wenn Sie eine "Stand-alone" haben 'SELECT *' - das ist schlecht, weil Sie (a) alle Spalten (benötigen Sie wirklich *** alle *** Spalten ???), (b) Sie geben nicht an, welche Spalten Sie haben möchten (könnte eine böse Überraschung bekommen, wenn eine BLOB-Spalte wie ein Bild an einem bestimmten Punkt hinzugefügt wird) und so weiter. Wenn ich nicht in einem 'IF EXISTS (..) 'bin, befürworte ich ** ** ** ** niemals ** zu verwenden (definitiv nicht in deinem Produktionscode) - verwende immer ** explizite ** Spalten und schnappe dir so wenige Spalten wie du wirklich brauchst. –

3

Es gibt keinen Unterschied, scheint der Ausführungsplan gleich zu sein.

enter image description here enter image description here enter image description here

+1

Wow! Großer Input! Danke für Ihre Bemühungen! – user1589188

+0

@ user1589188, Sie sind willkommen – Habib

+0

@Habib welches Werkzeug haben Sie für die Visualisierung Zweck verwendet und gibt es einige mehr, die Sie empfehlen können. –

Verwandte Themen