Hanya sedikit, tapi inilah cara lain untuk menulis FizzBuzz :)100 baris sudah cukup untuk menampilkan pernyataan WITH, menurut saya.
;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
Tetapi kekuatan sebenarnya di balik WITH (dikenal sebagai Common Table Expression http://msdn.microsoft.com/en-us/library/ms190766.aspx "CTE") di SQL Server 2005 dan di atasnya adalah Rekursi, seperti di bawah ini di mana tabel dibangun melalui iterasi yang ditambahkan ke tabel virtual setiap kali.
;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
Untuk menjalankan kueri serupa di semua basis data, Anda dapat menggunakan sp_msforeachdb yang tidak berdokumen . Telah disebutkan dalam jawaban lain, tetapi sp_msforeachdb, bukan sp_foreachdb.
Hati-hati saat menggunakannya, karena beberapa hal tidak seperti yang Anda harapkan. Perhatikan contoh ini
exec sp_msforeachdb 'select count(*) from sys.objects'
Alih-alih jumlah objek dalam setiap DB, Anda akan mendapatkan jumlah yang SAMA yang dilaporkan, mulai dari DB saat ini. Untuk menyiasatinya, selalu "gunakan" database terlebih dahulu. Perhatikan tanda kurung siku untuk memenuhi syarat nama database multi-kata.
exec sp_msforeachdb 'use [?]; select count(*) from sys.objects'
Untuk kueri spesifik Anda tentang mengisi tabel penghitungan, Anda dapat menggunakan sesuatu seperti di bawah ini. Tidak yakin tentang kolom DATE, jadi tabel penghitungan ini hanya memiliki kolom DBNAME dan IMG_COUNT, tetapi semoga membantu Anda.
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