Bagaimana cara menghitung jumlah kolom di setiap tabel?


8

Saya ingin menulis skrip untuk mencantumkan tabel dalam database saya dengan jumlah kolom dalam tabel itu.

Seperti ini:

table name      number       
---------       --------     
table1            1         
table2            13        
table3            2         
table4            6    

Jawaban:


20

Anda dapat melihat kolom di sys.columns :

Mengembalikan baris untuk setiap kolom objek yang memiliki kolom, seperti tampilan atau tabel. Berikut ini adalah daftar jenis objek yang memiliki kolom:

  • Fungsi perakitan bernilai tabel (FT)
  • Fungsi SQL bernilai tabel sebaris (IF)
  • Tabel internal (TI)
  • Tabel sistem (S)
  • Fungsi SQL bernilai tabel (TF)
  • Tabel pengguna (U)
  • Tampilan (V)

Untuk kolom yang dihitung dalam tabel, kueri ini dapat digunakan:

SELECT [Schema] = s.name
    , [Table] = t.name
    , number = COUNT(*)
FROM sys.columns c
INNER JOIN sys.tables t ON c.object_id = t.object_id
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
GROUP BY t.name, s.name
  • sys.tables dapat digantikan oleh sys.views untuk dihitung dalam tampilan
  • sys.objects juga dapat digunakan dengan WHEREklausa pada jenis yang diperlukan:

    SELECT [Schema] = s.name
        , [Table] = o.name
        , number = COUNT(*)
        , o.type_desc
    FROM sys.columns c
    INNER JOIN sys.objects o ON c.object_id = o.object_id
    INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
    WHERE type IN (
        'U'     --> U = Table (user-defined)
        , 'V'   --> V = View
        , ...) 
    GROUP BY o.name, s.name, o.type_desc;

Ini juga akan berfungsi meskipun lebih disukai (baca Kasus terhadap INFORMATION_SCHEMA tampilan dari Aaron Bertrand) untuk menggunakan kueri pertama:

SELECT TABLE_SCHEMA
    , TABLE_NAME
    , number = COUNT(*) 
FROM INFORMATION_SCHEMA.COLUMNS
GROUP BY TABLE_SCHEMA, TABLE_NAME;

0

SELECT COUNT (*) DARI INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TBlName'

Cukup untuk mendapatkan sejumlah kolom yang ada di Tabel kami

Hanya untuk Satu meja


Jawaban Anda juga harus mempertimbangkan CATALOG dan SCHEMA.
McNets

0
select st.name, count(1) as column_count 
from sys.tables st
inner join sys.columns sc on st.object_id = sc.object_id
where st.name like '%%'
group by st.name
order by count(1) desc
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.