如何增大数据库文件?

Sil*_*bit 1 t-sql database sql-server

我正在尝试使用以下代码来扩展数据库。但是我收到以下错误。我如何检查大小 (3600MB) 并在必要时增加它?

USING MyDatabase

ALTER DATABASE MyDatabase
MODIFY FILE (NAME =  MyDatabase_data, SIZE = 3600MB)
Run Code Online (Sandbox Code Playgroud)

错误:修改文件失败。指定大小小于或等于当前大小。

更新:由于交通繁忙,我没有使用 Auto Grow。由于我在这里的设置(长篇无关的故事),我需要使用代码进行更改。但是,如果此代码多次运行,则会出现上述错误。在再次尝试更改之前,我需要先检查尺寸。

Kri*_*ten 5

DB的大小将显示为

USE MyDatabase
EXEC sp_spaceused
Run Code Online (Sandbox Code Playgroud)

查看 sp_spaceused 的代码(我碰巧正在查看 SQL 2000 服务器,但 SQL2005/SQL2008 的情况相同/相似)

USE master
EXEC sp_helptext 'sp_spaceused'
Run Code Online (Sandbox Code Playgroud)

相关代码是:

declare @dbsize dec(15,0)
declare @logsize dec(15)
declare @bytesperpage   dec(15,0)
declare @pagesperMB     dec(15,0)

    select @dbsize = sum(convert(dec(15),size))
        from dbo.sysfiles
        where (status & 64 = 0)

    select @logsize = sum(convert(dec(15),size))
        from dbo.sysfiles
        where (status & 64 <> 0)

    select @bytesperpage = low
        from master.dbo.spt_values
        where number = 1
            and type = 'E'
    select @pagesperMB = 1048576 / @bytesperpage

    select  database_name = db_name(),
        database_size =
            ltrim(str((@dbsize + @logsize) / @pagesperMB,15,2) + ' MB')
Run Code Online (Sandbox Code Playgroud)

因此,您可以将大小保存到变量并再次比较您尝试设置的大小:

DECLARE @database_size bigint
SELECT  @database_size = (@dbsize + @logsize) / @pagesperMB
IF @database_size < 3600
BEGIN
    PRINT 'Expanding MyDatabase ...'
    ALTER DATABASE MyDatabase
    MODIFY FILE (NAME =  MyDatabase_data, SIZE = 3600MB)
    PRINT 'Expanding MyDatabase DONE'
END
ELSE
BEGIN
    PRINT 'No expansion of MyDatabase required'
END
Run Code Online (Sandbox Code Playgroud)