首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL Server2008中的dm_os_volume_stats相当于SQL Server2008中的R2?

SQL Server2008中的dm_os_volume_stats相当于SQL Server2008中的R2?
EN

Stack Overflow用户
提问于 2015-02-24 14:53:58
回答 1查看 1.9K关注 0票数 2

sys.dm_os_volume_stats是在SQL Server2008 R2中引入的,但在SQL Server2008中不可用。

自定义脚本是唯一的选择吗?或者是否有其他系统视图提供类似的功能?

EN

回答 1

Stack Overflow用户

发布于 2015-03-13 22:34:23

自定义脚本是我能想到的2008年的全部内容。如果你有执行xp_cmdshell的能力,我可能会这样做……

代码语言:javascript
运行
复制
DECLARE @recid         INT
       ,@workstring    VARCHAR(8000)
       ,@parsearrayxml XML
       ,@vexec_str     VARCHAR(8000)

-- Create table variable to hold drive size info
DECLARE @drives TABLE (
   [RecID]             TINYINT IDENTITY(1,1) PRIMARY KEY -- Record ID 
  ,[Drive]             VARCHAR(10)                       -- Drive letter
  ,[Size]              BIGINT NULL                       -- Drive size
   )

-- Create table variable for xp_cmdshell output
DECLARE @xp_cmdshell_output TABLE (
   [output]            VARCHAR(8000) NULL                -- Raw text returned from xp_cmdshell execution
   )

INSERT INTO @xp_cmdshell_output ([output])
   EXEC [master].[dbo].[xp_cmdshell] N'FSUTIL FSINFO DRIVES'
IF (SELECT COUNT(1) 
       FROM @xp_cmdshell_output 
       WHERE [output] = 'The FSUTIL utility requires that you have administrative privileges.') > 0
  RAISERROR ('SQL Server Service account not an admin on this computer.', 11, 1);
ELSE
BEGIN
   SELECT @workstring = [output] 
      FROM @xp_cmdshell_output 
      WHERE [output] LIKE 'Drives:%'
   DELETE FROM @xp_cmdshell_output
   SELECT @workstring = REPLACE(@workstring, 'Drives', '')
   SELECT @workstring = REPLACE(@workstring, ':', '')
   SELECT @workstring = REPLACE(@workstring, ' ', '')
   IF CHARINDEX(CHAR(0), @workstring) != 0
      SELECT @workstring = REPLACE(@workstring, CHAR(0), ',')
END
SELECT @parsearrayxml = CAST(
                             ('<X>'
                              + REPLACE(@workstring
                                       ,'\'
                                       ,'</X><X>')
                              + '</X>')
                              AS XML)
INSERT INTO @drives ([Drive])
   SELECT LTRIM(N.value('.', 'VARCHAR(4000)'))
      FROM @parsearrayxml.nodes('X') AS T(N)
      WHERE ASCII(LTRIM(N.value('.', 'VARCHAR(4000)'))) != 0

      -- Get size for each drive
      SELECT @recid = 1
      WHILE @recid <= (SELECT MAX([RecID]) FROM @drives)
      BEGIN
         SELECT @workstring = ''
               ,@vexec_str = 'EXEC [master].[dbo].[xp_cmdshell] ' 
                           + QUOTENAME('FSUTIL VOLUME DISKFREE ' 
                                + [Drive] 
                                + ':'
                             ,CHAR(39))
            FROM @drives
            WHERE [RecID] = @recid
         INSERT INTO @xp_cmdshell_output ([output])
            EXEC (@vexec_str)
         SELECT @workstring = [output] 
            FROM @xp_cmdshell_output 
            WHERE [output] LIKE '%Total # of bytes%'
         IF @workstring IS NOT NULL AND LEN(@workstring) > 0
         BEGIN
            SELECT @workstring = LTRIM(
                                       SUBSTRING(@workstring
                                                ,CHARINDEX(':'
                                                          ,@workstring
                                                          ) + 1
                                                ,LEN(@workstring)
                                                )
                                       )
            SELECT @workstring = LEFT(@workstring, LEN(@workstring)-1)
            UPDATE @drives 
               SET [Size] = (CONVERT(BIGINT, @workstring)/1024)/1024 
               WHERE [RecID] = @recid
         END
         ELSE 
         DELETE
            FROM @drives 
            WHERE [RecID] = @recid
         DELETE FROM @xp_cmdshell_output
         SELECT @recid = @recid + 1
      END
SELECT * FROM @drives

您可能需要对我的代码进行一点调试,但是这个概念应该会让您朝着正确的方向前进。

干杯,肯

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28689790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档