sql-server - 如何增加数据库文件?

标签 sql-server database tsql

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

USING MyDatabase

ALTER DATABASE MyDatabase
MODIFY FILE (NAME =  MyDatabase_data, SIZE = 3600MB)

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

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

最佳答案

数据库的大小将显示为

USE MyDatabase
EXEC sp_spaceused

查看 sp_spaceused 的代码(我碰巧正在查看 SQL 2000 服务器,但对于 SQL2005/SQL2008 也是如此)

USE master
EXEC sp_helptext 'sp_spaceused'

相关代码为:

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')

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

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

关于sql-server - 如何增加数据库文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/592540/

相关文章:

sql-server - 如何在没有配置外部表权限的情况下加入多个azure数据库?

c# - 使用不存在和连接的 SQL 查询到 LINQ 语法

sql-server - 列 "invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause"

mysql - 如何选择正确的Joomla数据库表?

c# - 谁可以访问 MVVM 模式中的数据库

mysql - 一起使用 COUNT 和 DISTINCT 关键字来计算不同值的数量

sql - 如何使用 T-SQL 在 SQL Server 中输出非结构化文件?

sql-server - T-SQL如何防止删除表中的第一行

sql-server - 在 T-SQL 中执行 "Foreach Update"的最佳方法是什么?

sql-server - 如何彻底删除LocalDB实例?