Compter les lignes dans plus d'une table avec tSQL

J'ai besoin de countr les lignes dans plusieurs tables dans SQL Server 2008. Je fais ceci:

select count(*) from (select * from tbl1 union all select * from tbl2) 

Mais cela me donne une erreur de syntaxe incorrecte près de). Pourquoi?

PS. Le nombre réel de tables peut être supérieur à 2.

Si vous avez un nombre différent de colonnes dans vos arrays, essayez de cette façon

  SELECT count(*) FROM ( SELECT NULL as columnName FROM tbl1 UNION ALL SELECT NULL FROM tbl2 ) T 

essaye ça:

Vous devez donner un nom à votre table dérivée

 select count(*) from (select * from tbl1 union all select * from tbl2)a 

Je pense que vous devez alias le SELECT dans la clause FROM :

 select count(*) from ( select * from tbl1 union all select * from tbl2 ) AS SUB 

Vous devez également vous assurer que le * dans les deux tables tbl1 et tbl2 renvoie exactement le même nombre de colonnes et qu'elles doivent correspondre dans leur type.

Je n'aime pas faire le syndicat avant de faire le count. Cela donne à l'optimiseur SQL l'opportunité de choisir de faire plus de travail.

La solution d'AlexK (supprimée) va bien. Vous pourriez aussi faire:

 select (select count(*) from tbl1) + (select count(*) from tbl2) as cnt