数据库使用率最大值

时间:2013-04-26 12:02:29

标签: sql-server max

我想要一个可以执行的存储过程,它提供了数据库可以占用的最大可能空间百分比。例如,SQL Server 2005/2008具有4GB数据库限制,而2008R2具有10GB限制(快速版本)。

我知道我可以EXEC sp-spaceused获取当前的数据库大小和未分配的空间,但是未分配的空间似乎是一些任意的块大小,并且随着数据库的增长将分配一个新的块。

我可以调用一个程序来获取数据库的最大大小限制吗?理想情况下,我想要的是当前分配的数量与最大数量的百分比,因此如果数据库当前为2GB,并且我在SQL 2008 R2(最大10GB)上,则过程将返回20.0,或0.2表示20%。由于数据库可以安装在任意数量的SQL Server上,因此我不想假设SQL服务器版本,并且希望在运行时获得最大值。

2 个答案:

答案 0 :(得分:0)

您可以使用SELECT @@version并解析该字符串中的版本和版本。您必须将其与具有特定SQL版本/版本允许的最大存储空间的手动填充数据集进行比较。

这样的东西应该从版本字符串中获取该信息

DECLARE @VersionString VARCHAR(500)
DECLARE @Product VARCHAR(50)
DECLARE @Edition VARCHAR(50)
SELECT @VersionString = @@VERSION
SET @Product = SUBSTRING(@VersionString, 0, PATINDEX('%-%', @VersionString))
SET @Edition = SUBSTRING(@VersionString, PATINDEX('%Corp%', @VersionString) + 13 , 18)
SELECT @Product
SELECT @Edition

答案 1 :(得分:0)

如果我没弄错,在非Express版本中,数据库大小没有特别的限制。因此,数据库的大小仅受HDD容量的限制。所以,试试这个 -

SELECT 
      d.server_name
    , d.sversion_name
    , d.edition
    , max_db_size_in_gb = 
        CASE WHEN engine_edition = 4 
            THEN 
                CASE 
                    WHEN d.sversion_name LIKE '%2012%' THEN 10
                    WHEN d.sversion_name LIKE '%2008 R2%' THEN 10
                    WHEN d.sversion_name LIKE '%2008%' THEN 4 
                    WHEN d.sversion_name LIKE '%2005%' THEN 4
                END
            ELSE -1 
        END
FROM (
    SELECT 
          sversion_name = SUBSTRING(v.ver, 0, CHARINDEX('-', v.ver) - 1)
        , engine_edition = SERVERPROPERTY('EngineEdition')
        , edition = SERVERPROPERTY('Edition')
        , server_name = SERVERPROPERTY('ServerName')
    FROM (SELECT ver = @@VERSION) v
) d