是因为用了MSDE吧?换成SQL Server标准版应该就好了。

解决方案 »

  1.   

    难道数据库所在盘区是fat16的?
      

  2.   


    两个文件都收缩了后,看看大小有变化没得呢步骤:
    1.在sql server的控制台里选中考勤的数据库;
    2.点右键,[所有任务]->[收缩数据库],弹出收缩数据库窗口;
    3.点窗口上的[文件]按钮;
    4.选中数据文件或者日志文件,对这两个文件进行单独的收缩;
      

  3.   


       ScanDensity DECIMAL,
       BestCount INT,
       ActualCount INT,
       LogicalFrag DECIMAL,
       ExtentFrag DECIMAL)-- Open the cursor
    OPEN tables-- Loop through all the tables in the database
    FETCH NEXT
       FROM tables
       INTO @tablenameWHILE @@FETCH_STATUS = 0
    BEGIN
       --检索表或视图的碎片
       INSERT INTO #fraglist 
       EXEC ('DBCC SHOWCONTIG (''' + @tablename + ''') 
          WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS')
       FETCH NEXT
          FROM tables
          INTO @tablename
    END-- Close and deallocate the cursor
    CLOSE tables
    DEALLOCATE tables
    /*
       SELECT ObjectName, ObjectId, IndexId, LogicalFrag
       FROM #fraglist
       WHERE LogicalFrag >= @maxfrag
          AND INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0
    */
    -- Declare cursor for list of indexes to be defragged
    DECLARE indexes CURSOR FOR
       SELECT ObjectName, ObjectId, IndexId, LogicalFrag
       FROM #fraglist
       WHERE LogicalFrag >= @maxfrag
          AND INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0-- Open the cursor
    OPEN indexes-- loop through the indexes
    FETCH NEXT
       FROM indexes
       INTO @tablename, @objectid, @indexid, @fragWHILE @@FETCH_STATUS = 0
    BEGIN
       PRINT 'Executing DBCC INDEXDEFRAG (0, ' + RTRIM(@tablename) + ',
          ' + RTRIM(@indexid) + ') - 当前碎片 '
           + RTRIM(CONVERT(varchar(15),@frag)) + '%'
      --执行碎片整理
       SELECT @execstr = 'DBCC INDEXDEFRAG (0, ' + RTRIM(@objectid) + ',
           ' + RTRIM(@indexid) + ')'
       EXEC (@execstr)   FETCH NEXT
          FROM indexes
          INTO @tablename, @objectid, @indexid, @frag
    END-- Close and deallocate the cursor
      

  4.   

    /*Perform a 'USE <database name>' to select the database in which to run the script.*/
    -- Declare variables
    SET NOCOUNT ON
    DECLARE @tablename VARCHAR (128)
    DECLARE @execstr   VARCHAR (255)
    DECLARE @objectid  INT
    DECLARE @indexid   INT
    DECLARE @frag      DECIMAL
    DECLARE @maxfrag   DECIMAL-- Decide on the maximum fragmentation to allow
    SELECT @maxfrag = 30.0-- Declare cursor
    DECLARE tables CURSOR FOR
       SELECT TABLE_NAME
       FROM INFORMATION_SCHEMA.TABLES
       WHERE TABLE_TYPE = 'BASE TABLE'-- Create the table
    CREATE TABLE #fraglist (
       ObjectName CHAR (255),
       ObjectId INT,
       IndexName CHAR (255),
       IndexId INT,
       Lvl INT,
       CountPages INT,
       CountRows INT,
       MinRecSize INT,
       MaxRecSize INT,
       AvgRecSize INT,
       ForRecCount INT,
       Extents INT,
       ExtentSwitches INT,
       AvgFreeBytes INT,
       AvgPageDensity INT,
       ScanDensity DECIMAL,
       BestCount INT,
       ActualCount INT,
       LogicalFrag DECIMAL,
       ExtentFrag DECIMAL)-- Open the cursor
    OPEN tables-- Loop through all the tables in the database
    FETCH NEXT
       FROM tables
       INTO @tablenameWHILE @@FETCH_STATUS = 0
    BEGIN
    -- Do the showcontig of all indexes of the table
       INSERT INTO #fraglist 
       EXEC ('DBCC SHOWCONTIG (''' + @tablename + ''') 
          WITH FAST, TABLERESULTS, ALL_INDEXES, NO_INFOMSGS')
       FETCH NEXT
          FROM tables
          INTO @tablename
    END-- Close and deallocate the cursor
    CLOSE tables
    DEALLOCATE tables-- Declare cursor for list of indexes to be defragged
    DECLARE indexes CURSOR FOR
       SELECT ObjectName, ObjectId, IndexId, LogicalFrag
       FROM #fraglist
       WHERE LogicalFrag >= @maxfrag
          AND INDEXPROPERTY (ObjectId, IndexName, 'IndexDepth') > 0-- Open the cursor
    OPEN indexes-- loop through the indexes
    FETCH NEXT
       FROM indexes
       INTO @tablename, @objectid, @indexid, @fragWHILE @@FETCH_STATUS = 0
    BEGIN
       PRINT 'Executing DBCC INDEXDEFRAG (0, ' + RTRIM(@tablename) + ',
          ' + RTRIM(@indexid) + ') - fragmentation currently '
           + RTRIM(CONVERT(varchar(15),@frag)) + '%'
       SELECT @execstr = 'DBCC INDEXDEFRAG (0, ' + RTRIM(@objectid) + ',
           ' + RTRIM(@indexid) + ')'
       EXEC (@execstr)   FETCH NEXT
          FROM indexes
          INTO @tablename, @objectid, @indexid, @frag
    END-- Close and deallocate the cursor
    CLOSE indexes
    DEALLOCATE indexes-- Delete the temporary table
    DROP TABLE #fraglist
    GO