2009-12-05 11 views
8

Si conozco el nombre de la base de datos y el nombre de la tabla, ¿cómo puedo encontrar las columnas? ¿Cuál es el recuento de la tabla de la base de datos maestra del servidor sql?¿Cómo encontrar el recuento de columnas de cualquier tabla en cualquier base de datos desde la base de datos maestra del servidor sql?

¿Cuál es la forma más rápida de encontrar el recuento de columnas de cualquier tabla de base de datos?

¿Qué opinas sobre el rendimiento de esta consulta?

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

Necesito para soportar sql server 2000 en adelante.

Respuesta

17

Puede variar ligeramente dependiendo de la versión de SQL Server, pero esto funcionará para 2005:

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

En 2000:

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

Si usted podría tener varias tablas con el mismo exacta nombre de la tabla bajo diferentes propietarios, entonces tendrá que dar cuenta de eso. Olvidé el nombre de la columna en sysobjects para verlo en la parte superior de mi cabeza.

ACTUALIZACIÓN hay nuevas versiones de SQL Server y el cumplimiento de la norma ANSI:

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

Pero este post [http: //www.codeproject .com/KB/database/RefactorTSQLs.aspx] [Trate de no usar COUNT (*) para obtener el recuento de registros en la tabla] dice que su consulta anterior no siempre proporciona resultados precisos. – anonymous

+0

recuento (*) es preciso, lea el artículo nuevamente – blackanchorage

+0

@TomH: su primera consulta para SQL Server 2005 no funcionará, si está en "maestro", y desea verificar una tabla desde otra base de datos. Deberá utilizar 'OBJECT_ID ('. . ')' para obtener resultados precisos ... –

6

¿Qué tal

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

Usted podría (y debería) hacer esto - tratar de evitar el uso de la "sysobjects" vista - ya no es compatible y podría eliminarse en SQL Server 2008 R2 o posterior.

lugar, utilice la "sys" vista de catálogo en la base de datos:

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

Que debe hacer el truco, y es probablemente la forma más fácil y rápida de hacerlo.

+0

¿Pero es compatible con sql server 2000? – anonymous

+0

No, eso es para SQL Server 2005 en adelante - no mencionó SQL Server 2000 en su publicación ....... –

+0

Lo siento por eso. Pero necesito una consulta que admita SQL Server 2000 en adelante. – 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

Bienvenido a SO! En sus respuestas, diríjase a la pregunta original. Se refiere a entidades no definidas por la declaración del problema del solicitante. Además: ¿Esta respuesta proporciona un valor agregado en comparación con las respuestas existentes? – cfi

3

que podría emitir algo como esto,

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

o se puede ver todas las tablas con columnas cuentan sus

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

Cuestiones relacionadas