8
votes

Comment trouver des colonnes Nombre de tables dans n'importe quelle base de données de la base de données SQL Server Master?

Si je connais le nom de la base de données et le nom de la table, comment puis-je trouver des colonnes-compter de la table à partir de la base de données SQL Server Server?

Quel est le moyen le plus rapide de trouver le nombre de colonnes de n'importe quelle table de base de données?

Que pensez-vous des performances de cette requête? xxx

Je dois prendre en charge SQL Server 2000 et à l'envers.


0 commentaires

6 Réponses :


17
votes

Il peut varier légèrement en fonction de la version de SQL Server, mais cela fonctionnera pour 2005: xxx pré>

en 2000: p> xxx pré> > Si vous avez peut-être plusieurs tables avec le même nom de table exact sous différents propriétaires, vous devez expliquer cela. J'oublie le nom de la colonne dans SysObjects de regarder le dessus de ma tête. P>

Mise à jour des versions plus récentes de SQL Server et de la conformité ANSI: p>

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


4 commentaires

Mais cet article [ codeProject.com/kb/database/refactortsqls.aspx ] [Essayez de ne pas utiliser Count (*) pour obtenir le nombre d'enregistrements dans le tableau] indique que votre requête précédente ne fournit pas toujours un résultat précis.


@Tomh: Votre première requête pour SQL Server 2005 ne fonctionnera pas, si vous êtes dans "Master", et souhaitez vérifier une table d'une autre base de données. Vous devez utiliser objet_id ('. . ') pour des résultats précis ...


@JMSA - Ils sont deux choses totalement différentes. La requête dans le lien que vous avez fourni était d'obtenir le total rangée compte pour une table à l'aide d'une seule valeur de colonne dans Sysindexes. Ces données peuvent effectivement devenir obsolètes et être inexactes. Ma requête est une ligne réelle comptant directement contre la table concernée, ce qui se trouve dans ce cas une table système.


Que diriez-vous de compter (1) au lieu de compter (*)?



6
votes

Que diriez-vous de

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


0 commentaires

7
votes

vous pouvez (et devrait) faire cela - essayez d'éviter d'utiliser la vue "SysObjects" - il n'est plus pris en charge et peut être supprimé dans SQL Server 2008 R2 ou ultérieurement.

Au lieu de la vue "SYS". Dans la base de données: xxx

qui devrait faire l'affaire, et c'est probablement le moyen le plus facile et le plus rapide de le faire.


3 commentaires

Mais cela prend-il en charge SQL Server 2000?


Non, c'est pour SQL Server 2005 et UP - Vous n'avez pas mentionné SQL Server 2000 dans votre message ...........


Désolé. Mais j'ai besoin d'une requête prenant en charge SQL Server 2000 et vers l'avant.



1
votes
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

1 commentaires

Bienvenue pour! Dans vos réponses, veuillez cibler la question initiale. Vous vous référez aux entités non définies par la déclaration de problème de l'Asker. Aussi: Cette réponse fournit-elle une valeur ajoutée par rapport aux réponses existantes?



3
votes

Vous pouvez émettre quelque chose comme ça,

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


0 commentaires

1
votes

ou vous pouvez afficher toutes les tables avec leurs colonnes comptent

Sélectionnez le compte (Nom de colonne) comme "colonne_count", Nom de table De l'information_schema.Columns Group par Table_Name Commande par "colonne_count" Desc


0 commentaires