2009-10-12 6 views

Répondre

0

Pas vraiment - SQL Server 2005 introduit une énorme amélioration de la gestion des systèmes avec le catalogue système « sys » schéma et les vues de gestion dynamique - mais dans SQL Server 2000, vous êtes assez limité.

Vous pouvez utiliser ce script pour vérifier et recueillir l'espace utilisé l'information et de la présenter bien - mais il est toujours à l'aide du sp_spaceused proc stocké à la fin:

--************************************** 
-- Name: Get SQL Table Size - Table and Index Space - Row Count 
-- Description: This Script will return the row count and the amount of 
-- disk space that each table uses within a specifed database. 
-- When returning total disk space used, it breaks it up into 3 categories... 
-- 1. The amount used by data 
-- 2. The Amount used by indexes 
-- 3. The amount of unused space 

SET NOCOUNT ON 

DECLARE @cmdstr varchar(100) 
DECLARE @Sort bit 

SELECT @Sort = 0 /* Edit this value for sorting options */ 

--Create Temporary Table 
CREATE TABLE #TempTable 
    ([Table_Name] varchar(50), 
    Row_Count int, 
    Table_Size varchar(50), 
    Data_Space_Used varchar(50), 
    Index_Space_Used varchar(50), 
    Unused_Space varchar(50)) 

--Create Stored Procedure String 
SELECT @cmdstr = 'sp_msforeachtable ''sp_spaceused "?"''' 

--Populate Tempoary Table 

INSERT INTO #TempTable 
    EXEC(@cmdstr) 

--Determine sorting method 

IF @Sort = 0 BEGIN 
    --Retrieve Table Data and Sort Alphabetically 
    SELECT * FROM #TempTable 
    ORDER BY Table_Name 
END 
ELSE BEGIN /*Retrieve Table Data and Sort by the size of the Table*/ 
    SELECT * 
    FROM #TempTable 
    ORDER BY Table_Size DESC 
END 

--Delete Temporay Table 
DROP TABLE #TempTable 
+0

Je reçois des informations de table sur toutes les bases de données de tous les serveurs, puis les stocke dans un emplacement commun. Pour chaque daatabase, je souhaite obtenir le nom de serveur, le nom de base de données, sp_spaceused pour chaque table. Ce paquet SSIS n'aime pas les tables temporaires, donc je cherchais des alternatives. J'ai essayé de faire sp_msforeachdb 'sp_msforeachtable ....' Une aide? – Manjot

+0

pourquoi est-ce faux? exec sp_MSforeachdb 'utiliser [@]; execute sp_MSForEachTable '' insert dans #TableSizeAudit EXEC sp_spaceused '' ''? '' ''; '' ',' @ ' – Manjot

+0

Le tri de la taille de la table est un peu désactivé. '80 KB 'est suivi de' 700 KB ', suivi de '70 KB', etc. – MEMark

0

Vous pouvez toujours faire sp_helptext sp_spaceused et de voir par vous-même ce qu'il fait, d'où obtient-il les données. Vous pouvez également exécuter adn afficher le plan d'exécution, à peu près le même résultat. Dans la mesure où je me souviens dans SQL 2000, l'espace utilisé est récupéré à partir de l'information dans sysindexes

+0

Ce que je veux savoir est: joindre les résultats de: exec sp_spaceused 'nom de la table'; select @@ servername dans la même ligne sans utiliser de table temporaire. – Manjot

0

Plus nécessaire.

encore Il serait bon d'apprendre à ce sujet « un jour »

0

Vous pouvez utiliser ceci:

DBCC PDW_SHOWSPACEUSED ("TableName"); 

pour obtenir l'espace réservé, l'espace de données, l'espace d'index, l'espace inutilisé, PDW_NODE_ID et distribution ID de la table. NB: Le nombre de lignes dans le résultat est toujours 60 en raison de certains paramètres internes.