2017-10-18 43 views
1

Que signifie exactementSélectionnez '' de TableA

select '' from TableA 

faire? Lorsque je l'exécute sur une table donnée, je récupère un enregistrement pour toutes les lignes de la table qui sont évidemment vides avec l'en-tête de '(aucun nom de colonne)' parce qu'aucun alias n'a été utilisé. J'ai vu cette requête utilisée comme sous-requête dans les instructions 'not exists'.

À quel moment cette requête serait-elle utile et est-ce une bonne pratique d'interroger de cette façon? Par exemple, quand je l'ai vu pour la première fois, j'ai pensé qu'il retournerait une ligne vide, mais en fait, il retourne toutes les lignes de la table et elles sont vides. J'ai regardé autour de moi et n'ai pas trouvé de réponse pour cela. Merci

+1

il peut être utile dans 'EXISTS' ou NOT EXISTS', quand il vérifie simplement l'existence d'une ligne avec des conditions – Lamak

+0

@Lamak merci, j'ai essayé de vérifier le plan d'exécution de la requête pour cela aussi pour regarder dans les coulisses mais n'ont pas les bonnes permissions. – DrHouseofSQL

+1

Il vérifie s'il y a des retours d'enregistrements, même chose que 'select 1 from table', et l'utiliser avec' exists' peut booster vos performances car s'il trouve un résultat, passez à la partie suivante, vous ne le faites pas vraiment besoin de se soucier à ce sujet est de retourner toutes les lignes avec la valeur vide – LONG

Répondre

2

Lorsque vous vérifiez si quelque chose existe dans une table, il est courant de sélectionner une valeur arbitraire plutôt qu'une colonne réelle, car elle affecte le plan d'exécution (si vous sélectionnez une colonne réelle, le plan d'exécution prend en compte cette colonne et cela peut prendre un peu plus de temps, même si vous n'utilisez pas la colonne).

Le plus souvent, je l'ai vu 1:

IF EXISTS (SELECT 1 FROM MyTable WHERE SomeColumn > 10) 

Si vous venez de soins s'il y a une ligne , vous pouvez court-circuiter la requête plutôt que d'obtenir toutes les lignes ... bien que je soupçonne la EXISTS déclaration s'arrêterait dès que n'importe quelle rangée a été trouvée de toute façon.

IF EXISTS (SELECT TOP 1 '' FROM TableA) 
+0

merci @Fenton J'ai essayé de vérifier le plan d'exécution de la requête pour cela aussi pour regarder dans les coulisses, mais n'ont pas les bonnes autorisations – DrHouseofSQL

0

Vous utilisez cette syntaxe si vous souhaitez ajouter une valeur statique dans le cadre de votre requête pour une raison quelconque

Par ex

SELECT 
    'SELECT TOP 10 * FROM '+name 
from sys.objects 
where type = 'U' 

Cela va créer de créer automatiquement des requêtes pour toutes les tables que vous avez dans votre base de données