SQL sever 中系統表sys.objects的做用與字段含義

  • 0 定義

        官方對sys.objects的定義:在數據庫中建立的每一個用戶定義的架構做用域內的對象在該表中均對應一行。 sql

        這種翻譯,真心的無力吐槽。咱們用中文再翻譯下這句中文:你在庫中建立一張表,這裏就會記錄一條。 數據庫

  • 1 查看

        執行腳本看下它的樣子。 架構

SELECT * FROM sys.objects

  • 2 表中字段解釋
序號 列名 數據類型 說明
1 name sysname 對象名。
2 object_id int 對象標識號。  在數據庫中是惟一的。  
3 principal_id int 若是不是架構全部者,則爲單個全部者的 ID。  默認狀況下,架構包含的對象由架構全部者擁有。  不過,經過使用 ALTER AUTHORIZATION 語句更改全部權能夠指定備用全部者。  若是沒有備用的單個全部者,則爲 NULL。若是對象類型爲下列類型之一,則爲 NULL:
C = CHECK 約束
D = DEFAULT(約束或獨立)
F = FOREIGN KEY 約束
PK = PRIMARY KEY 約束
R = 規則(舊式,獨立)
TA = 程序集(CLR 集成)觸發器
TR = SQL 觸發器
UQ = UNIQUE 約束
4 schema_id int 包含該對象的架構的 ID。始終包含在sys或INFORMATION_SCHEMA架構中的架構做用域內的系統對象。
5 parent_object_id int 此對象所屬對象的 ID。
0 = 不是子對象。
6 type char(2) 對象類型:
AF = 聚合函數 (CLR)
C = CHECK 約束
D = DEFAULT(約束或獨立)
F = FOREIGN KEY 約束
FN = SQL 標量函數
FS = 程序集 (CLR) 標量函數
FT = 程序集 (CLR) 表值函數
IF = SQL 內聯表值函數
IT = 內部表
P = SQL 存儲過程
PC = 程序集 (CLR) 存儲過程
PG = 計劃指南
PK = PRIMARY KEY 約束
R = 規則(舊式,獨立)
RF = 複製篩選過程
S = 系統基表
SN = 同義詞
SO = 序列對象
適用範圍:SQL Server 2012 到 SQL Server 2016。
SQ = 服務隊列
TA = 程序集 (CLR) DML 觸發器
TF = SQL 表值函數
TR = SQL DML 觸發器
TT = 表類型
U = 表(用戶定義類型)
UQ = UNIQUE 約束
V = 視圖
X = 擴展存儲過程
7 type_desc nvarchar(60) 對對象類型的說明:
AGGREGATE_FUNCTION
CHECK_CONSTRAINT
CLR_SCALAR_FUNCTION
CLR_STORED_PROCEDURE
CLR_TABLE_VALUED_FUNCTION
CLR_TRIGGER
DEFAULT_CONSTRAINT
EXTENDED_STORED_PROCEDURE
FOREIGN_KEY_CONSTRAINT
INTERNAL_TABLE
PLAN_GUIDE
PRIMARY_KEY_CONSTRAINT
REPLICATION_FILTER_PROCEDURE
RULE
SEQUENCE_OBJECT
適用範圍:SQL Server 2012 到 SQL Server 2016。
SERVICE_QUEUE
SQL_INLINE_TABLE_VALUED_FUNCTION
SQL_SCALAR_FUNCTION
SQL_STORED_PROCEDURE
SQL_TABLE_VALUED_FUNCTION
SQL_TRIGGER
SYNONYM
SYSTEM_TABLE
TABLE_TYPE
UNIQUE_CONSTRAINT
USER_TABLE
View
8 create_date datetime 對象的建立日期。
9 modify_date datetime 上次使用 ALTER 語句修改對象的日期。  若是對象爲表或視圖,則建立或修改表或視圖的彙集索引時,modify_date 也會隨之更改。  
10 is_ms_shipped bit 對象由內部 SQL Server 組件建立。
11 is_published bit 對象爲發佈對象。
12 is_schema_published bit 僅發佈對象的架構。

  • 3 有什麼做用

        3.1 你能夠用下面的命令列出感興趣的全部對象 函數

SELECT * FROM sysobjects WHERE xtype = <type of interest>

SELECT * FROM sysobjects WHERE xtype = 'V'  --例如:查看視圖
        3.2 判斷數據庫中是否已經存在某個表,有的話就刪除該表
----方法一:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[表名]') and type='U'))
drop table [dbo].[表名]

----方法二:
if exists (Select * From sysObjects Where type='U' And Name='表名')) 
drop table [dbo].[表名]
        通常建議不要更新此表,可是查詢仍是OK的。
相關文章
相關標籤/搜索