【IT168技术文档】
如何查询数据库对象所属的filegroup及相关SQL呢?查询了好多资料,也在网上搜索了很久,没有介绍这个的。最后通过研究sp_help系统存储过程,得到了答案。
在sysobjects系统表中,没有filegroup信息,只有sysindexes表中有groupid字段。当在SQL Server中新建一个表时,即使没有建立任何Index,系统都会为这个表在sysindexes生成一条记录。利用这个特性,用一下SQL可以查询出Table所在的filegourp信息:
SELECT Data_located_on_filegroup = fg.groupname, Table_name = obj.name FROM sysfilegroups fg, sysindexes idx, sysobjects obj WHERE idx.id = obj.id AND obj.type in ('S ','U ') AND idx.indid < 2 AND idx.groupid = fg.groupid ORDER BY fg.groupname -- 查询数据库的基本信息,包括有数据文件和日志文件 sp_helpdb plannet -- 查询系统的文件组信息 select * from sysfilegroups sp_helpfilegroup -- 查询编号为@id的对象的文件组信息 exec sp_objectfilegroup @id -- 查询所有表的文件组信息 SELECT Data_located_on_filegroup = fg.groupname, Table_name = obj.name FROM sysfilegroups fg, sysindexes idx, sysobjects obj WHERE idx.id = obj.id AND obj.type in ('S ','U ') AND idx.indid < 2 AND idx.groupid = fg.groupid ORDER BY fg.groupname -- 检查指定文件组中的所有表(在当前数据库中)的分配和结构完整性 DBCC CHECKFILEGROUP