2010-11-28 5 views
0

Dans SQL Server 2008, la requête suivante fonctionne très bien:Erreur de liaison SQL

WITH T AS (
     SELECT node.value('fn:local-name(.)', 'varchar(50)') AS Name, node.value('(.)', 'float') AS Value 
     FROM @xml.nodes('data//*') AS x(node) 
    ) 
    SELECT @OutOfBounds = Count(T.Name) 
    FROM T INNER JOIN [int].RankItems ON [int].RankItems.RankItem = T.Name 
    WHERE (T.Value < [int].RankItems.[Min] OR T.Value > [int].RankItems.[Max]) 
    OPTION (OPTIMIZE FOR (@XML UNKNOWN)) 

Cependant, je voulais écrire comme suit:

WITH T AS (
     SELECT node.value('fn:local-name(.)', 'varchar(50)') AS Name, node.value('(.)', 'float') AS Value 
     FROM @xml.nodes('data//*') AS x(node) 
    ) 
    SELECT @OutOfBounds = Count(T.Name) 
    FROM T INNER JOIN [int].RankItems T2 ON T2.RankItem = T.Name 
    WHERE (T.Value < T2.[Min] OR T.Value > T2.[Max]) 
    OPTION (OPTIMIZE FOR (@XML UNKNOWN)) 

Cela me donne un "ne pouvait pas lier" erreur sur T2. Je ne peux pas voir pourquoi.

Répondre

2

vous manque la déclaration AS, à savoir

FROM T INNER JOIN [int].RankItems AS T2 ON T2.RankItem = T.Name 
+0

Wow, si simple une omission dans une requête autrement non simples! Merci @RLT. – IamIC