Apenas um cutucão, mas aqui está outra maneira de escrever FizzBuzz :) 100 linhas são suficientes para mostrar a instrução WITH, eu acho.
;WITH t100 AS (
SELECT n=number
FROM master..spt_values
WHERE type='P' and number between 1 and 100
)
SELECT
ISNULL(NULLIF(
CASE WHEN n % 3 = 0 THEN 'Fizz' Else '' END +
CASE WHEN n % 5 = 0 THEN 'Buzz' Else '' END, ''), RIGHT(n,3))
FROM t100
Mas o verdadeiro poder por trás do WITH (conhecido como Common Table Expression http://msdn.microsoft.com/en-us/library/ms190766.aspx "CTE") no SQL Server 2005 e acima é a Recursão, conforme abaixo, onde a tabela é construída por meio de iterações adicionadas à tabela virtual a cada vez.
;WITH t100 AS (
SELECT n=1
union all
SELECT n+1
FROM t100
WHERE n < 100
)
SELECT
ISNULL(NULLIF(
CASE WHEN n % 3 = 0 THEN 'Fizz' Else '' END +
CASE WHEN n % 5 = 0 THEN 'Buzz' Else '' END, ''), RIGHT(n,3))
FROM t100
Para executar uma consulta semelhante em todos os bancos de dados, você pode usar o sp_msforeachdb não documentado . Foi mencionado em outra resposta, mas é sp_msforeachdb, não sp_foreachdb.
Tenha cuidado ao usá-lo, pois algumas coisas não são o que você espera. Considere este exemplo
exec sp_msforeachdb 'select count(*) from sys.objects'
Em vez das contagens de objetos dentro de cada banco de dados, você obterá a MESMA contagem relatada, comece a do banco de dados atual. Para contornar isso, sempre "use" o banco de dados primeiro. Observe os colchetes para qualificar nomes de banco de dados com várias palavras.
exec sp_msforeachdb 'use [?]; select count(*) from sys.objects'
Para sua consulta específica sobre o preenchimento de uma tabela de contagem, você pode usar algo como o abaixo. Não tenho certeza sobre a coluna DATE, então esta tabela de contagem tem apenas as colunas DBNAME e IMG_COUNT, mas espero que ajude você.
create table #tbl (dbname sysname, img_count int);
exec sp_msforeachdb '
use [?];
if object_id(''tbldoc'') is not null
insert #tbl
select ''?'', count(*) from tbldoc'
select * from #tbl