Tylko grzebanie, ale oto inny sposób na napisanie FizzBuzz :) 100 wierszy wystarczy, aby wyświetlić instrukcję WITH, jak sądzę.
;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 prawdziwa siła stojąca za WITH (znana jako Common Table Expression http://msdn.microsoft.com/en-us/library/ms190766.aspx "CTE") w SQL Server 2005 i nowszych wersjach to Rekurencja, jak poniżej, gdzie tabela jest budowana poprzez iteracje dodawania do wirtualnej tabeli za każdym razem.
;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
Aby uruchomić podobne zapytanie we wszystkich bazach danych, możesz użyć nieudokumentowanej sp_msforeachdb . Zostało to wspomniane w innej odpowiedzi, ale jest to sp_msforeachdb, a nie sp_foreachdb.
Zachowaj jednak ostrożność podczas korzystania z niego, ponieważ niektóre rzeczy nie są tym, czego oczekujesz. Rozważ ten przykład
exec sp_msforeachdb 'select count(*) from sys.objects'
Zamiast zliczania obiektów w każdej bazie danych, otrzymasz raport o takiej samej liczbie, zacznij od aktualnej bazy danych. Aby obejść ten problem, zawsze najpierw "użyj" bazy danych. Zwróć uwagę na nawiasy kwadratowe, aby zakwalifikować wielowyrazowe nazwy baz danych.
exec sp_msforeachdb 'use [?]; select count(*) from sys.objects'
W przypadku konkretnego zapytania dotyczącego wypełniania tabeli z zestawieniami możesz użyć czegoś podobnego do poniższego. Nie jestem pewien co do kolumny DATE, więc ta tabela zawiera tylko kolumny DBNAME i IMG_COUNT, ale mam nadzieję, że to pomoż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