Само едно мушкане, но ето още един начин да напишете FizzBuzz :) 100 реда са достатъчни, за да покажа израза WITH, предполагам.
;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
Но истинската сила зад WITH (известен като Common Table Expression http://msdn.microsoft.com/en-us/library/ms190766.aspx "CTE") в SQL Server 2005 и по-нови е рекурсията, както по-долу, където таблицата се изгражда чрез итерации, добавящи се към виртуалната таблица всеки път.
;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
За да изпълните подобна заявка във всички бази данни, можете да използвате недокументирания sp_msforeachdb . Споменато е в друг отговор, но е sp_msforeachdb, а не sp_foreachdb.
Бъдете внимателни, когато го използвате, тъй като някои неща не са това, което очаквате. Разгледайте този пример
exec sp_msforeachdb 'select count(*) from sys.objects'
Вместо броя на обектите във всяка DB, ще получите СЪЩИЯ отчетен брой, като започнете този от текущата DB. За да заобиколите това, винаги първо "използвайте" базата данни. Обърнете внимание на квадратните скоби, за да определите имената на базата данни с много думи.
exec sp_msforeachdb 'use [?]; select count(*) from sys.objects'
За вашата конкретна заявка за попълване на таблица за изчисление можете да използвате нещо като по-долу. Не съм сигурен за колоната ДАТА, така че тази таблица за изчисление има само колоните DBNAME и IMG_COUNT, но се надявам, че ще ви помогне.
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