1

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

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

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

4

2 回答 2

0

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

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
于 2013-04-26T12:31:12.557 回答
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
于 2013-04-26T12:25:38.030 回答