天天看點

快速删除資料庫中所有表中的資料sysobjectstruncate和不帶where子句的delete, 以及drop都會删除表内的資料 

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,再重新導入/插入資料