sql >> Databasteknik >  >> RDS >> Sqlserver

Använda med klausulen SQL Server 2008

Bara en peta, men här är ett annat sätt att skriva FizzBuzz :) 100 rader räcker för att visa WITH-satsen, tror jag.

;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

Men den verkliga kraften bakom WITH (känd som Common Table Expression http://msdn.microsoft.com/en-us/library/ms190766.aspx "CTE") i SQL Server 2005 och högre är Rekursionen, som nedan där tabellen byggs upp genom iterationer som läggs till i den virtuella tabellen varje gång.

;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

För att köra en liknande fråga i alla databaser kan du använda den odokumenterade sp_msforeachdb . Det har nämnts i ett annat svar, men det är sp_msforeachdb, inte sp_foreachdb.

Var dock försiktig när du använder den, eftersom vissa saker inte är vad du förväntar dig. Tänk på det här exemplet

exec sp_msforeachdb 'select count(*) from sys.objects'

Istället för antalet objekt inom varje DB, kommer du att få SAMMA räkning rapporterad, börja den för den aktuella DB. För att komma runt detta, "använd" alltid databasen först. Notera hakparenteserna för att kvalificera databasnamn med flera ord.

exec sp_msforeachdb 'use [?]; select count(*) from sys.objects'

För din specifika fråga om att fylla i en sammanräkningstabell kan du använda något som nedan. Osäker på kolumnen DATE, så den här sammanställningstabellen har bara kolumnerna DBNAME och IMG_COUNT, men hoppas att den hjälper dig.

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


  1. Codeigniter-transaktioner

  2. Statiska funktioner och subs

  3. Django-inställningar konfigurerar databaser med två motorer

  4. Mysql int(11) nummer utanför intervallet