2009-12-05 42 views
8

Nếu tôi biết tên cơ sở dữ liệu và tên bảng, làm cách nào tôi có thể tìm số cột của bảng từ cơ sở dữ liệu chủ của máy chủ sql?Cách tìm số cột của bất kỳ bảng nào trong bất kỳ cơ sở dữ liệu nào từ cơ sở dữ liệu chủ của máy chủ sql?

Cách nhanh nhất để tìm số cột của bất kỳ bảng cơ sở dữ liệu nào?

Bạn nghĩ sao về hiệu suất của truy vấn này?

select count(*) from SYSCOLUMNS where id=(select id from SYSOBJECTS where name='Categories') 

Tôi cần hỗ trợ máy chủ sql 2000 trở lên.

Trả lời

17

Nó có thể thay đổi chút ít tùy theo phiên bản của SQL Server, nhưng điều này sẽ làm việc cho năm 2005:

SELECT 
    COUNT(*) 
FROM 
    <database name>.sys.columns 
WHERE 
    object_id = OBJECT_ID('<database name>.<owner>.<table name>') 

Năm 2000:

SELECT 
    COUNT(*) 
FROM 
    <database name>.sysobjects o 
INNER JOIN <database name>.syscolumns c ON 
    c.id = o.id 
WHERE 
    o.name = '<table name>' 

Nếu bạn có thể có nhiều bảng với cùng chính xác tên bảng dưới các chủ sở hữu khác nhau thì bạn sẽ cần phải tính đến điều đó. Tôi quên tên cột trong sysobjects để nhìn ra khỏi đỉnh đầu của tôi.

CẬP NHẬT CHO phiên bản mới của SQL Server và tuân thủ ANSI:

SELECT COUNT(*) 
FROM 
    <database name>.INFORMATION_SCHEMA.COLUMNS 
WHERE 
    TABLE_SCHEMA = '<table schema>' AND 
    TABLE_NAME = '<table name>' 
+0

Nhưng bài này [http: //www.codeproject .com/KB/database/RefactorTSQLs.aspx] [Cố gắng không sử dụng COUNT (*) để lấy số lượng bản ghi trong bảng] nói rằng, truy vấn trước đó của bạn không phải lúc nào cũng cung cấp kết quả chính xác. – anonymous

+0

đếm (*) là chính xác, đọc lại bài viết – blackanchorage

+0

@TOMH: truy vấn đầu tiên của bạn cho SQL Server 2005 sẽ không hoạt động, nếu bạn đang ở trong "chính" và muốn kiểm tra bảng từ cơ sở dữ liệu khác. Bạn cần sử dụng 'OBJECT_ID ('. . ')' để có kết quả chính xác ... –

6

Làm thế nào về

select count(*) from <database name.information_schema.columns where table_name = '<table_name>' 
7

Bạn có thể (và nên) làm điều này - cố gắng tránh sử dụng "sysobjects" view - nó không còn được hỗ trợ và có thể bị xóa trong SQL Server 2008 R2 hoặc phiên bản mới hơn.

Thay vào đó, sử dụng "sys" Danh mục xem trong cơ sở dữ liệu:

SELECT COUNT(*) 
FROM yourdatabase.sys.columns 
WHERE object_id = OBJECT_ID('yourdatabase.dbo.tablename') 

Điều đó sẽ làm các trick, và nó có thể là cách dễ nhất và nhanh nhất để làm điều đó.

+0

Nhưng nó có hỗ trợ máy chủ sql 2000 không? – anonymous

+0

Không, đó là cho SQL Server 2005 và lên - bạn đã không đề cập đến SQL Server 2000 trong bài viết của bạn ....... –

+0

Xin lỗi vì điều đó. Nhưng tôi cần một truy vấn hỗ trợ sql server 2000 trở đi. – anonymous

1
select Object_name(object_id) as "Object Name", count(*) as "Column Count" from Course_Plannning_Expense.sys.columns 
where Object_name(object_id) not like 'sys%' 
group by object_id 
order by "Column Count" desc 
+0

Chào mừng bạn đến với SO! Trong câu trả lời của bạn, vui lòng nhắm mục tiêu câu hỏi gốc. Bạn đang đề cập đến các thực thể không được xác định bởi câu lệnh vấn đề của người hỏi. Ngoài ra: Câu trả lời này có cung cấp giá trị gia tăng so với các câu trả lời hiện có không? – cfi

3

bạn có thể đưa ra một cái gì đó như thế này,

select count(*) from information_schema.columns where table_name='yourtablename' 
1

Hoặc bạn có thể xem tất cả các bảng với các cột của họ đếm

SELECT COUNT(column_name) as "column_count", table_name FROM INFORMATION_SCHEMA.COLUMNS GROUP BY table_name ORDER BY "column_count" DESC

Các vấn đề liên quan