轉載:https://blog.csdn.net/zhenglianghui163/article/details/79013375
sysobjects
定義:關於SQL Server數據庫的一切信息都保存在它的系統表格裏。我懷疑你是否花過比較多的時間來檢查系統表格,因爲你總是忙於用戶表格。但是,你可能需要偶爾做一點不同尋常的事,例如數據庫所有的觸發器。你可以一個一個地檢查表格,但是如果你有500個表格的話,這可能會消耗相當大的人工。
這就讓sysobjects表格有了用武之地。雖然我不建議你更新這個表格,但是你當然有權對其進行審查。(個人理解:就是系統表,包含數據庫的所有信息,比如你想要查看觸發器,一個一個找太費時間費資源,可以在sysobjects表中獲取相應的數據)
列名 | 數據類型 | 描述 |
name | sysname | 對象名,常用列 |
id | int | 對象標識號 |
xtype | char(2) | 對象類型。常用列。xtype可以是下列對象類型中的一種: C = CHECK 約束 D = 默認值或 DEFAULT 約束 F = FOREIGN KEY 約束 L = 日誌 FN = 標量函數 IF = 內嵌表函數 P = 存儲過程 PK = PRIMARY KEY 約束(類型是 K) RF = 複製篩選存儲過程 S = 系統表 TF = 表函數 TR = 觸發器 U = 用戶表 UQ = UNIQUE 約束(類型是 K) V = 視圖 X = 擴展存儲過程 |
uid | smallint | 所有者用戶對象編號 |
info | smallint | 保留。僅限內部使用 |
status | int | 保留。僅限內部使用 |
base_schema_ ver | int | 保留。僅限內部使用 |
replinfo | int | 保留。供複製使用 |
parent_obj | int | 父對象的對象標識號(例如,對於觸發器或約束,該標識號爲表 ID)。 |
crdate | datetime | 對象的創建日期。 |
ftcatid | smallint | 爲全文索引註冊的所有用戶表的全文目錄標識符,對於沒有註冊的所有用戶表則爲 0 |
schema_ver | int | 版本號,該版本號在每次表的架構更改時都增加。 |
stats_schema_ ver | int | 保留。僅限內部使用。 |
type | char(2) | 對象類型。可以是下列值之一: C = CHECK 約束 D = 默認值或 DEFAULT 約束 F = FOREIGN KEY 約束 FN = 標量函數 IF = 內嵌表函數 K = PRIMARY KEY 或 UNIQUE 約束 L = 日誌 P = 存儲過程 R = 規則 RF = 複製篩選存儲過程 S = 系統表 TF = 表函數 TR = 觸發器 U = 用戶表 V = 視圖 X = 擴展存儲過程 |
userstat | smallint | 保留。 |
sysstat | smallint | 內部狀態信息 |
indexdel | smallint | 保留 |
refdate | datetime | 留用 |
version | int | 保留 |
deltrig | int | 保留 |
instrig | int | 保留 |
updtrig | int | 保留 |
seltrig | int | 保留 |
category | int | 用於發佈、約束和標識 |
cache | smallint | 保留 |
你可以用下面的命令列出感興趣的所有對象:
SELECT * FROM sysobjects WHERE xtype = <type of interest> --例如:查看視圖 SELECT * FROM sysobjects WHERE xtype = 'V'
判斷數據庫中是否已經存在某個表,有的話就刪除該表
--方法一:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[表名]
--方法二:
if exists (select * from sysobjects where id = object_id(N'表名') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[表名]
--方法三:
if(Exists(Select * From SysObjects Where xtype='U' And Name='表名'))
drop table [dbo].[表名]
以後繼續補充。
某些朋友的一些疑問:
1、問:object_id(N'表名')中N'代表什麼意思?
答:N'' 代表 Unicode類型.可以支持不同語種的對象名
2、 問:select * from dbo.sysobjects where id = object_id(N'[dbo].[usertab]') and OBJECTPROPERTY(id, N'IsUserTable') = 1
這句中的object_id(N'[dbo].[usertab]')和OBJECTPROPERTY(id, N'IsUserTable') = 1
是什麼意思?
答:object_id(N'[dbo].[usertab]'):是得出系統給表usertab分配的唯一ID
OBJECTPROPERTY(id, N'IsUserTable') = 1
該對象的屬性是表類型的 objectproperty(id,property)函數的使用,
3、 問:USE master SELECT * FROM ...SysObjects ” ...sysobjects ” -- 三個句點的前綴是什麼意思?
答:對數據庫對象名的 Transact-SQL 引用可以是由四部分組成的名稱,格式如下:[ server_name.[[database_name].[owner_name]. | database_name.[owner_name]. | owner_name.] ] object_name