突くだけですが、FizzBuzz を記述する別の方法を次に示します :)WITH ステートメントを表示するには 100 行で十分だと思います。
;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 (共通テーブル式 として知られる) の背後にある真の力http://msdn.microsoft.com/en-us/library/ms190766.aspx SQL Server 2005 以降の "CTE") は再帰であり、以下のように、毎回仮想テーブルに追加する反復によってテーブルが構築されます。
;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_foreachdb ではなく sp_msforeachdb です。
ただし、期待どおりに動作しないものもありますので、使用する際には注意してください。この例を考えてみてください
exec sp_msforeachdb 'select count(*) from sys.objects'
プレ>各 DB 内のオブジェクト数の代わりに、現在の DB から始まる同じ数が報告されます。これを回避するには、常に最初にデータベースを「使用」してください。複数単語のデータベース名を修飾するための角括弧に注意してください。
exec sp_msforeachdb 'use [?]; select count(*) from sys.objects'
プレ>集計テーブルの作成に関する特定のクエリについては、次のようなものを使用できます。 DATE 列についてはよくわからないので、この集計テーブルには 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
プレ>