sql >> Databáze >  >> RDS >> Sqlserver

Použití klauzule With SQL Server 2008

Jen šťouchnutí, ale tady je další způsob, jak napsat FizzBuzz :) 100 řádků stačí k zobrazení příkazu WITH, myslím.

;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 skutečný výkon za WITH (známý jako Common Table Expression http://msdn.microsoft.com/en-us/library/ms190766.aspx "CTE") v SQL Server 2005 a vyšších je rekurze, jak je uvedeno níže, kde je tabulka sestavována pomocí iterací, které se pokaždé přidávají do virtuální tabulky.

;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

Chcete-li spustit podobný dotaz ve všech databázích, můžete použít nezdokumentovaný sp_msforeachdb . Bylo to zmíněno v jiné odpovědi, ale je to sp_msforeachdb, nikoli sp_foreachdb.

Buďte opatrní při používání, protože některé věci nejsou to, co očekáváte. Zvažte tento příklad

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

Namísto počtů objektů v každé DB získáte STEJNÝ hlášený počet, začínající aktuální DB. Chcete-li to obejít, vždy nejprve "použijte" databázi. Všimněte si hranatých závorek pro kvalifikaci víceslovných názvů databází.

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

Pro váš konkrétní dotaz na vyplnění tabulky sčítání můžete použít něco jako níže. Nejste si jisti sloupcem DATE, takže tato tabulka obsahuje pouze sloupce DBNAME a IMG_COUNT, ale doufám, že vám to pomůž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


  1. wordpress posts_orderby filtr s vlastní tabulkou v pluginu

  2. Může být vnořený SP MySql úzkým hrdlem?

  3. Nepodařilo se najít platný datový adresář. Obecná binární instalace MySQL

  4. Mazání záznamů před určitým datem