Sql-Server

一個文件組,多個數據文件,如何獲取每個文件中的表列表

  • May 22, 2013

在我的一個生產數據庫中,我有一個文件組,其中有 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' 

引用自:https://dba.stackexchange.com/questions/42678