Bare et stik, men her er en anden måde at skrive FizzBuzz på :)100 rækker er nok til at vise WITH-sætningen, regner jeg med.
;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
Men den virkelige magt bag WITH (kendt som Common Table Expression http://msdn.microsoft.com/en-us/library/ms190766.aspx "CTE") i SQL Server 2005 og nyere er Recursion, som nedenfor, hvor tabellen er bygget op gennem iterationer, der tilføjes til den virtuelle tabel hver gang.
;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
For at køre en lignende forespørgsel i alle databaser kan du bruge den udokumenterede sp_msforeachdb . Det er blevet nævnt i et andet svar, men det er sp_msforeachdb, ikke sp_foreachdb.
Vær dog forsigtig, når du bruger det, da nogle ting ikke er, hvad du forventer. Overvej dette eksempel
exec sp_msforeachdb 'select count(*) from sys.objects'
I stedet for optællingen af objekter inden for hver DB, vil du få det SAMME antal rapporteret, begynd tallet for den aktuelle DB. For at komme uden om dette, skal du altid "bruge" databasen først. Bemærk de firkantede parenteser for at kvalificere databasenavne med flere ord.
exec sp_msforeachdb 'use [?]; select count(*) from sys.objects'
Til din specifikke forespørgsel om at udfylde en optællingstabel kan du bruge noget som nedenstående. Ikke sikker på DATE-kolonnen, så denne optællingstabel har kun kolonnerne DBNAME og IMG_COUNT, men håber det hjælper dig.
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