2013-04-26 15 views
1

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

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

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

+0

但是这只适用于Express Edition。有多少个快递版本有不同的最大值?您的SP可以检查版本号,并返回正确的值。 – 2013-04-26 12:16:00

+0

你是说只有Express版本具有最大数据库大小?并且完整版本不受限制? – 2013-04-26 12:18:10

+0

实际用途是的。 SQLServer 2008的最大数据库大小超过500 TB。 – 2013-04-26 12:24:43

回答

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 
0

的。如果我没有记错,在非快速版本,也有通过数据库的大小没有特别的限制。因此,数据库的大小仅受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 
+0

相关问题:http://stackoverflow.com/questions/15960241/can-you-query-the-maximum-database-size-based-on-the-sql-server-license – Devart 2013-04-26 12:33:18