【问题标题】:Return Database Name from sys.database_files从 sys.database_files 返回数据库名称
【发布时间】:2017-09-19 06:13:45
【问题描述】:

有谁知道如何返回数据库名称?我似乎不知道如何将sys.database_files 加入sys.databases

SELECT
    a.NAME as FileName,
    FG.name as FileGroup,
    a.physical_name as FilePath,
    a.type_desc as FileType,
    CONVERT(DECIMAL(12,2),ROUND(a.size/128.000,2)) AS [Size],
    CONVERT(DECIMAL(12,2),ROUND(FILEPROPERTY(a.name,'SpaceUsed')/128.000,2)) AS [Used] ,
    CONVERT(DECIMAL(12,2),ROUND((a.size-FILEPROPERTY(a.name,'SpaceUsed'))/128.000,2)) AS [Free]
FROM 
    sys.database_files a
LEFT JOIN sys.filegroups FG ON 
    FG.data_space_id = a.data_space_id

【问题讨论】:

  • 这似乎很有帮助:stackoverflow.com/questions/9630279/…
  • sys.database_files 从当前数据库返回文件 - 不是所有数据库。所以select db_name() 除非你用一个三部分的名字来称呼它......

标签: sql sql-server


【解决方案1】:

改用sys.master_files - 有database_id - 像这样:

select 
    a.NAME as FileName,
    FG.name as FileGroup,
    a.physical_name as FilePath,
    a.type_desc as FileType,
    CONVERT(DECIMAL(12,2),ROUND(a.size/128.000,2)) AS [Size],
    CONVERT(DECIMAL(12,2),ROUND(FILEPROPERTY(a.name,'SpaceUsed')/128.000,2)) AS [Used] ,
    CONVERT(DECIMAL(12,2),ROUND((a.size-FILEPROPERTY(a.name,'SpaceUsed'))/128.000,2)) AS [Free]
from sys.master_files a
LEFT JOIN sys.filegroups FG ON 
    FG.data_space_id = a.data_space_id;

编辑:
将数据库名称添加到查询中:

select 
    d.name as DatabaseName,
    a.name as FileName,
    FG.name as FileGroup,
    a.physical_name as FilePath,
    a.type_desc as FileType,
    CONVERT(DECIMAL(12,2),ROUND(a.size/128.000,2)) AS [Size],
    CONVERT(DECIMAL(12,2),ROUND(FILEPROPERTY(a.name,'SpaceUsed')/128.000,2)) AS [Used] ,
    CONVERT(DECIMAL(12,2),ROUND((a.size-FILEPROPERTY(a.name,'SpaceUsed'))/128.000,2)) AS [Free]
from sys.databases d
left join sys.master_files a on d.database_id = a.database_id
left join sys.filegroups FG on
    FG.data_space_id = a.data_space_id;

【讨论】:

  • 用户询问如何获取数据库名称。您的“解决方案”不包含数据库名称...
  • @DavidWilson 好点,谢谢,我忘了添加一个带有数据库名称的示例;)。
【解决方案2】:
SELECT a.NAME as FileName ,b.name as FileGroup , b.physical_name as FilePath,   b.type_desc as FileType,
CONVERT(DECIMAL(12,2),ROUND(b.size/128.000,2)) AS [Size],
CONVERT(DECIMAL(12,2),ROUND(FILEPROPERTY(b.name,'SpaceUsed')/128.000,2)) AS [Used] ,
CONVERT(DECIMAL(12,2),ROUND((b.size-FILEPROPERTY(b.name,'SpaceUsed'))/128.000,2)) AS [Free]
FROM Sys.databases a 
INNER JOIN  Sys.master_files b ON a.database_id=b.database_id
WHERE a.database_id >4

【讨论】:

    猜你喜欢
    • 2013-05-22
    • 1970-01-01
    • 2017-06-01
    • 2019-06-13
    • 1970-01-01
    • 2021-09-03
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多