sql >> データベース >  >> RDS >> Sqlserver

With 句の使用 SQL Server 2008

    突くだけですが、FizzBu​​zz を記述する別の方法を次に示します :)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
      

    1. ORA-28860:UTL_HTTPを使用すると致命的なSSLエラーが発生しますか?

    2. mysqlからphpに大きなデータを取得する方法は?

    3. Postgis+ブースト::ジオメトリ+C++

    4. 簡単な例でSQLServerHierarchyIDを使用する方法