Làm cách nào để đếm số cột trong mỗi bảng?


8

Tôi muốn viết một tập lệnh để liệt kê các bảng trong cơ sở dữ liệu của tôi với số lượng cột trong bảng đó.

Như thế này:

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

Câu trả lời:


20

Bạn có thể xem các cột trong sys.columns :

Trả về một hàng cho mỗi cột của một đối tượng có các cột, chẳng hạn như khung nhìn hoặc bảng. Sau đây là danh sách các loại đối tượng có cột:

  • Các hàm lắp ráp có giá trị bảng (FT)
  • Các hàm SQL có giá trị trong bảng (IF)
  • Bảng nội bộ (CNTT)
  • Bảng hệ thống (S)
  • Các hàm SQL có giá trị bảng (TF)
  • Bảng người dùng (U)
  • Lượt xem (V)

Đối với các cột được tính trong bảng, truy vấn này có thể được sử dụng:

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 có thể được thay thế bằng sys.view để tính số lượt xem
  • sys.objects cũng có thể được sử dụng với WHEREmệnh đề trên (các) loại bắt buộc:

    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;
    

Điều này cũng sẽ hoạt động mặc dù nó được ưa thích hơn (đọc Trường hợp chống lại các quan điểm của Information_SCHema từ Aaron Bertrand) để sử dụng truy vấn đầu tiên:

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

0

CHỌN COUNT (*) TỪ THÔNG TIN_SCHema.COLUMNS WHERE TABLE_NAME = 'TBlName'

Đó là đủ để có được một số cột mà chúng ta có trong Bảng của chúng tôi

Nó chỉ dành cho một bảng


Câu trả lời của bạn cũng nên xem xét CATALOG và 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.