select 'truncate table ' + Name + ';' from sysobjects where xtype='U' order by name asc;
該條語句執行之後會将資料庫中所有的表都查詢出來,複制出來之後執行truncate語句即可
在資料庫内建立的每個對象(限制、預設值、日志、規則、存儲過程等)在表中占一行。隻有在 tempdb 内,每個臨時對象才在該表中占一行。
列名
資料類型
描述
name
sysname
對象名。
Id
int
對象辨別号。
xtype
char(2)
對象類型。可以是下列對象類型中的一種:
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
所有者對象的使用者 ID。
info
保留。僅限内部使用。
status
base_schema_
ver
replinfo
保留。供複制使用。
parent_obj
父對象的對象辨別号(例如,對于觸發器或限制,該辨別号為表 ID)。
crdate
datetime
對象的建立日期。
ftcatid
為全文索引注冊的所有使用者表的全文目錄辨別符,對于沒有注冊的所有使用者表則為 0。
schema_ver
版本号,該版本号在每次表的架構更改時都增加。
stats_schema_
type
對象類型。可以是下列值之一:
C = CHECK 限制
F = FOREIGN KEY 限制
K = PRIMARY KEY 或 UNIQUE 限制
R = 規則
S = 系統表
userstat
保留。
sysstat
内部狀态資訊。
indexdel
refdate
留作以後使用。
version
deltrig
instrig
updtrig
seltrig
category
用于釋出、限制和辨別。
cache
不同點:
1. truncate和 delete隻删除資料不删除表的結構(定義)
drop語句将删除表的結構被依賴的限制(constrain),觸發器(trigger),索引(index); 依賴于該表的存儲過程/函數将保留,但是變為invalid狀态.
2.delete語句是dml,這個操作會放到rollback segement中,事務送出之後才生效;如果有相應的trigger,執行的時候将被觸發.
truncate,drop是ddl, 操作立即生效,原資料不放到rollback segment中,不能復原. 操作不觸發trigger.
3.delete語句不影響表所占用的extent, 高水線(high watermark)保持原位置不動
顯然drop語句将表所占用的空間全部釋放
truncate 語句預設情況下見空間釋放到 minextents個 extent,除非使用reuse storage; truncate會将高水線複位(回到最開始).
4.速度,一般來說: drop>; truncate >; delete
5.安全性:小心使用drop 和truncate,尤其沒有備份的時候.否則哭都來不及
使用上,想删除部分資料行用delete,注意帶上where子句. 復原段要足夠大.
想删除表,當然用drop
想保留表而将所有資料删除. 如果和事務無關,用truncate即可. 如果和事務有關,或者想觸發trigger,還是用delete.
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新導入/插入資料