2010-12-16 127 views

Répondre

9

Vous cherchez la taille de la table , ou la taille d'une rangée dans la table? Ce dernier n'est disponible que si toutes vos colonnes sont de taille fixe, c.-à-d. Nchar et non nvarchar etc.

Avec les colonnes de taille variable, vous pouvez utiliser la longueur maximale de chaque colonne, et les additionner pour obtenir une ligne maximale. taille, mais cela ne reflétera pas exactement la taille réelle des rangées.

select sum(max_length) 
from sys.columns 
where object_id = object_id('MyTable') 

Vous pouvez également créer une requête qui retourne DATALENGTH pour chaque colonne dans une ligne particulière pour obtenir la taille totale de seulement cette ligne.

+3

... ou vous pouvez utiliser 'sys.dm_db_index_physical_stats' pour obtenir des valeurs beaucoup plus précises pour ces métriques: http://msdn.microsoft.com/en-us/library/ms188917.aspx –

+0

Merci @Remus, c'est un nouveau un pour moi. – ProfK

+0

@RemusRusanu - Oui, mais est-ce que cela peut me donner la taille maximale (en octets) d'une colonne ou d'une ligne d'une table? Si oui, quelle serait la requête? –

6

Les requêtes SQL ne renvoient pas de tables, elles renvoient des résultats. Il n'y a pas d'API pour déterminer la taille d'un résultat car les résultats ont la sémantique en streaming, vous commencez à lire le résultat jusqu'à la fin et vous ne pouvez pas connaître la taille initiale. Envoyer la taille d'avance nécessiterait que le serveur obtienne d'abord le résultat, le stocke quelque part, détermine sa taille (nombre de lignes), puis envoie la taille suivie du résultat. Évidemment, c'est inefficace et complètement indésirable. Il est préférable de commencer à diffuser le résultat dès que disponible sans devoir le stocker de façon intermédiaire.

Peut-être cherchez-vous autre chose?

La taille d'une table dans la base de données peut toujours être déterminée à partir de son nombre de pages, voir sys.allocation_units. La procédure d'assistance sp_spaceused peut lire et formater cette information pour vous.

+0

+1 pour "les requêtes ne retournent pas les tables, elles retournent les résultats" – ProfK

+0

+1 pour la bonne explication et droit au but. – yrushka

+0

Je pensais estimer la taille MAXIMALE d'une ligne, puis obtenir seulement le nombre() des lignes attendues. Ensuite, multipliez ces deux nombres pour obtenir une estimation de l'ensemble de résultats. Je ne sais pas si c'est la bonne façon de s'y prendre. Je suis coincé dans la première étape. Pouvez-vous m'aider - https://stackoverflow.com/questions/22518384/how-do-i-get-the-maximum-memory-consumed-by-all-data-types-in-sql-server Merci. –

2

En SSMS seulement, vous pouvez « inclure les statistiques du client » de l'un des menus qui donne certains informations

Dans le cas contraire, selon la réponse de Remus