Determine SQL Server Database Size

后端 未结 8 1613
野性不改
野性不改 2020-12-07 22:34

SQL Server 2005/2008 Express edition has the limitation of 4 GB per database. As far as I known the database engine considers data only, thus excluding log files, unused spa

8条回答
  •  悲&欢浪女
    2020-12-07 23:01

    You could use this old fashioned one as well...

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
    
    DECLARE @iCount int, @iMax int, @DatabaseName varchar(200), @SQL varchar (8000)
    
    Select NAME, DBID, crdate, filename, version 
    INTO #TEMP
    from MAster..SYSDatabASES 
    
    SELECT @iCount = Count(DBID) FROM #TEMP
    
    Select @SQL='Create Table ##iFile1 ( DBName varchar( 200) NULL, Fileid INT, FileGroup int, TotalExtents INT , USedExtents INT , 
    Name varchar(100), vFile varchar (300), AllocatedSpace int NUll, UsedSpace int Null, PercentageFree int Null ) '+ char(10)
    exec (@SQL)
    
    
    Create Table ##iTotals ( ServerName varchar(100), DBName varchar( 200) NULL, FileType varchar(10),Fileid INT, FileGroup int, TotalExtents INT , USedExtents INT , 
    Name varchar(100), vFile varchar (300), AllocatedSpace int NUll, UsedSpace int Null, PercentageFree int Null ) 
    
    
    WHILE @iCount>0
    BEGIN    
        SELECT @iMax =Max(dbid) FROM #TEMP
        Select @DatabaseName = Name FROM #TEMP where dbid =@iMax
    
        SELECT @SQL = 'INSERT INTO ##iFile1(Fileid , FileGroup , TotalExtents  , USedExtents  , Name , vFile)
         EXEC (''USE [' + @DatabaseName +  '] DBCC showfilestats'')    ' + char(10)
    
        Print  (@SQL)
        EXEC (@SQL)
    
    
        SELECT @SQL = 'UPDATE ##iFile1 SET DBName ='''+ @DatabaseName +''' WHERE DBName IS NULL'
        EXEC  (@SQL)
    
    
        DELETE FROM #TEMP WHERE dbid =@iMax
        Select @iCount =@iCount -1
    END
    UPDATE ##iFile1
    SET AllocatedSpace = (TotalExtents * 64.0 / 1024.0 ), UsedSpace =(USedExtents * 64.0 / 1024.0 )
    
    UPDATE ##iFile1
    SET PercentageFree = 100-Convert(float,UsedSpace)/Convert(float,AllocatedSpace   )* 100
    WHERE USEDSPACE>0
    
    CREATE TABLE #logspace (
       DBName varchar( 100),
       LogSize float,
       PrcntUsed float,
       status int
       )
    INSERT INTO #logspace
    EXEC ('DBCC sqlperf( logspace)')
    
    
    
    INSERT INTO ##iTotals(ServerName, DBName, FileType,Name, vFile,PercentageFree,AllocatedSpace)
    select @@ServerName ,DBNAME,  'Data' as FileType,Name, vFile, PercentageFree  , AllocatedSpace
    from ##iFile1
    UNION
    select @@ServerName ,DBNAME, 'Log' as FileType ,DBName,'' as vFile ,PrcntUsed  , LogSize
    from #logspace
    
    Select * from ##iTotals
    
    select ServerName ,DBNAME,  FileType, Sum( AllocatedSpace) as AllocatedSpaceMB
    from ##iTotals
    Group By  ServerName ,DBNAME, FileType
    Order By  ServerName ,DBNAME, FileType
    
    
    select ServerName ,DBNAME,  Sum( AllocatedSpace) as AllocatedSpaceMB
    from ##iTotals
    Group By  ServerName ,DBNAME
    Order By  ServerName ,DBNAME
    
    
    
    drop table ##iFile1
    drop table #logspace
    drop table #TEMP
    drop table ##iTotals
    

提交回复
热议问题