Sql-Server
一個文件組,多個數據文件,如何獲取每個文件中的表列表
在我的一個生產數據庫中,我有一個文件組,其中有 3 個數據文件位於 3 個不同的磁碟上。該文件組上有 50 多個表。
如何辨識 3 個數據文件之間的 50 個表中的每一個的位置?我需要知道每個表的聚集索引駐留在哪個數據文件上。
例子 :
Table A : Datafile 1 : FG1 Table B : Datafile 2 : FG1 Table C : Datafile 1 : FG1 Table D : Datafile 3 : FG1
文件組中的對象將使用文件組中的所有數據文件。FG1 中的任何表都平等地駐留在 Datafile1、Datafile2 和 Datafile3 上。如果您需要控制放置,則需要創建不同的文件組。要從文件組中刪除文件,請使用
DBCC SHRINKFILE EMPTYFILE
.
即使您的數據分佈在任意數量的數據文件中,但您仍然可以使用 INFORMATION_SCHEMA.TABLES 獲取表列表。
表格
概述 INFORMATION_SCHEMA.TABLES 視圖允許您獲取有關數據庫中所有表和視圖的資訊。預設情況下,它將向您顯示數據庫中每個表和視圖的此資訊。
說明 可以從 SQL Server 實例中的任何數據庫呼叫此視圖,並將返回該特定數據庫中數據的結果。
此視圖返回的列如下:
列名 數據類型 描述
- TABLE_CATALOG nvarchar(128) 表限定符。
- TABLE_SCHEMA nvarchar(128) 包含表的模式名稱。
- TABLE_NAME sysname 表名。
- TABLE_TYPE varchar(10) 表的類型。可以是 VIEW 或 BASE TABLE。
(來源:SQL Server 2005 聯機叢書)
下面是從 AdventureWorks 數據庫中提取的數據範例。使用此查詢提取此數據:
SELECT * FROM INFORMATION_SCHEMA.TABLES
要僅顯示表列表,您將使用此查詢:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'
要僅顯示僅包含視圖的列表,您將使用此查詢:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'VIEW'