Je ne peux pas penser à un facile façon de le faire du haut de ma tête.
Une façon serait faire générer dynamiquement la TSQL à la liste la taille totale de chaque colonne de chaque table qui pourrait être fait en utilisant quelque chose comme ceci:
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL = COALESCE(@SQL + CHAR(10) + 'UNION ALL' + CHAR(10), '') +
'SELECT ''' + QUOTENAME(t.name) + ''' AS TableName, ''' + QUOTENAME(c.name) + ''' AS ColumnName, SUM(DATALENGTH(' + QUOTENAME(c.name) + ')) AS TotalSizeBytes
FROM ' + QUOTENAME(t.name)
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
WHERE t.name = 'VoterAccount'
SET @SQL = 'SELECT TableName, ColumnName, TotalSizeBytes FROM (' + @SQL + ') x ORDER BY TotalSizeBytes DESC'
PRINT @SQL -- Just PRINT the SQL out. You can then copy it, and execute manually
qui renverrait par exemple
TableName ColumnName TotalSizeBytes
Table1 Column1 123456789
Table1 Column3 34356464
Table2 ColumnA 33987987
Cependant, je crains que c'est susceptible d'être une requête assez lourde pour fonctionner donc je pense bien à son sujet d'abord. S'il n'y a pas de meilleures suggestions et que vous essayez ceci, il pourrait être utile de le restreindre uniquement à un sous-ensemble de colonnes - c'est-à-dire ignorer les colonnes que vous connaissez depuis le début sont de petite taille être les plus grands.
La solution idéale serait que cette information soit déjà contenue dans les tables système/accessible via DMV d'une manière ou d'une autre - malheureusement je ne sais pas si c'est le cas, je ne l'ai jamais rencontré.
cela combiné avec une instruction exec (@SQL) fait exactement ce dont j'ai besoin, merci. Donc votre solution remplaçant PRINT @SQL par EXEC (@SQL) est parfaite. – LaBracca