2009-08-12 6 views
0

J'essaie de comprendre une procédure stockée historique que je dois corriger. J'ai trouvé ce DRVTBL mot-clé, et je ne pouvais pas savoir ce que cela signifie ??? (Ceci est une base de données SQL2000)SQL 2000 - DRVTBL?

SELECT ... 
FROM (  
     ...) 
) DRVTBL 

Répondre

3

DRVTBL est un alias pour la sous-requête qui le précède. Lorsque vous utilisez une sous-requête dans un SELECT comme ceci, vous devez lui donner un alias. Si vous supprimez DRVTBL, vous obtiendrez une erreur. Il ne doit alors pas continuer et être utilisé ailleurs.

0

Pouvez-vous montrer l'instruction SQL complète? Pour autant que je puisse le voir maintenant, DRVTBL n'est pas un mot-clé, mais un alias qui a été donné à la sous-requête utilisée dans votre clause FROM.

+0

@Frederik Gheysels, merci pour la réponse rapide. ce DRVTBL n'apparaît nulle part ailleurs dans le SP. – avnic

+0

Lorsque vous supprimez l'alias, il est possible que vous receviez une erreur de syntaxe et que SQL Server ne puisse pas exécuter la requête. Vous pouvez cependant changer le nom de l'alias en un nom plus approprié. –

1

DRVTBL, à partir de la requête que vous avez publiée, ressemble à un alias. Le travail comme des tables temporaires dans votre requête T-SQL. SQL Server 2005 dispose d'une version légèrement avancée de cette fonctionnalité, appelée Common Table Expressions.

Un exemple -

SELECT * 
FROM 
    (
     SELECT 
      Id, 
      Name 
     FROM Employee 
     WHERE Name LIKE 'A%' 
    ) EmployeeA 
WHERE EmployeeA.Name = 'Albert' 

Cela va créer une table contenant tous les crénelage Employee s dont le nom commence par A, et la requête externe, à son tour, sélectionnez les employés avec le nom Albert.

La même chose peut être écrit en utilisant CTE comme -

WITH EmployeeA AS 
(
    SELECT 
     Id, 
     Name 
    FROM Employee 
    WHERE Name LIKE 'A%' 

) 
SELECT * FROM EmployeeA WHERE EmployeeA.Name = 'Albert'