Jen šťouchnutí, ale tady je další způsob, jak napsat FizzBuzz :) 100 řádků stačí k zobrazení příkazu WITH, myslím.
;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
Ale skutečný výkon za WITH (známý jako Common Table Expression http://msdn.microsoft.com/en-us/library/ms190766.aspx "CTE") v SQL Server 2005 a vyšších je rekurze, jak je uvedeno níže, kde je tabulka sestavována pomocí iterací, které se pokaždé přidávají do virtuální tabulky.
;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
Chcete-li spustit podobný dotaz ve všech databázích, můžete použít nezdokumentovaný sp_msforeachdb . Bylo to zmíněno v jiné odpovědi, ale je to sp_msforeachdb, nikoli sp_foreachdb.
Buďte opatrní při používání, protože některé věci nejsou to, co očekáváte. Zvažte tento příklad
exec sp_msforeachdb 'select count(*) from sys.objects'
Namísto počtů objektů v každé DB získáte STEJNÝ hlášený počet, začínající aktuální DB. Chcete-li to obejít, vždy nejprve "použijte" databázi. Všimněte si hranatých závorek pro kvalifikaci víceslovných názvů databází.
exec sp_msforeachdb 'use [?]; select count(*) from sys.objects'
Pro váš konkrétní dotaz na vyplnění tabulky sčítání můžete použít něco jako níže. Nejste si jisti sloupcem DATE, takže tato tabulka obsahuje pouze sloupce DBNAME a IMG_COUNT, ale doufám, že vám to pomůže.
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