2010-12-10 28 views

Répondre

8

Vous traitez un CTE en tant que sous-requête, alors qu'il devrait plutôt être utilisé comme une table.

essayer cette

;with cte as 
(
select rowid from batchinfo where datapath like '%thc%' 
) 
select * from qvalues 
INNER JOIN cte on cte.rowid=qvalues.rowid 
+0

I Ne pensez pas que vous avez besoin des mots "plus comme" dans "..utilisé plutôt comme une table" car ils ne peuvent être utilisés que comme des tableaux :) +1 pour mettre le point-virgule au début de l'instruction pour éviter les erreurs lorsque le CTE est utilisé dans les déclarations plus importantes. – Tony

1

Comme par hasard fait allusion dans la réponse d'Al W (et le commentaire de Tony). Le fait que l'erreur soit décrite comme se produisant à la ligne 6 signifie que ce n'est pas la première déclaration dans le lot. Ce qui signifie que vous devez avoir un point-virgule avant le WITH mot-clé:

When a CTE is used in a statement that is part of a batch, the statement before it must be followed by a semicolon.

En outre, à partir Transact-SQL Syntax conventions.

Although the semicolon is not required for most statements in this version of SQL Server, it will be required in a future version.

Il vaut la peine de prendre l'habitude de mettre les points-virgules dans