刪除所表的所有資料

2022-07-29 06:24:09 字數 2698 閱讀 7034

在開發的時候往往新增不少的測試資料,在執行指令碼之前需要將原有的資料刪除,而且還會有外來鍵約束,標識列的問題。於是寫了這個自動刪除表的所有資料.

1

ifobject_id('

temp_clear_all_data

') is

null

2begin

3declare

@tablename

varchar(50)4

--外來鍵表資訊

5select

6object_name(parent_object_id) as

ftable,

7object_name(referenced_object_id) as

ptable

8into

temp_clear_all_data

9from

sys.foreign_key_columns

10--

新增無外來鍵引用的住建標的表

11insert

into

temp_clear_all_data

12select

null, name from sys.tables where name not

in13 (select ftable from

temp_clear_all_data)

14and name <>

'temp_clear_all_data'15

--刪除外來鍵表記錄

16while

exists(select

*from temp_clear_all_data where ftable is

notnull)17

begin

18declare c cursor

for19

select

distinct ftable from temp_clear_all_data where ftable not

in20 (select ptable from

temp_clear_all_data)

21openc22

fetch

next

from c into

@tablename

23while

@@fetch_status=0

24begin

25--

刪除資料

26exec('

delete from ['+

@tablename+'

]')27

--回滾標識列

28if

exists(select

*from sys.identity_columns where

[object_id]=

object_id(@tablename

))29

exec('

dbcc checkident(['+

@tablename+'

],reseed,0)')

30else

31print

@tablename+'

沒有標識列, 不需要回滾'32

fetch

next

from c into

@tablename

33end

34closec35

deallocatec36

delete

from temp_clear_all_data where ftable not

in37 (select ptable from

temp_clear_all_data)

38end

39--

刪除剩餘主鍵表記錄(包含不帶主鍵的表)

40declare c cursor

for41

select

distinct ptable from

temp_clear_all_data

42openc43

fetch

next

from c into

@tablename

44while

@@fetch_status=0

45begin

46if

exists(select

*from sys.identity_columns where

[object_id]=

object_id(@tablename

))47

exec('

dbcc checkident(['+

@tablename+'

],reseed,0)')

48else

49print

@tablename+'

沒有標識列, 不需要回滾'50

fetch

next

from c into

@tablename

51end

52closec53

deallocatec54

delete

from

temp_clear_all_data

55--

刪除臨時表

56drop

table

temp_clear_all_data

57end

58go

mysql刪除表中所有資料

delete from表名 truncate table表名 不帶where 引數的delete 語句可以刪除 mysql 表中所有內容,使用 truncate table 也可以清空 mysql 表中所有內容。效率上truncate 比delete 快,但truncate 刪除後不記錄 mysql...

SQL2008刪除所有資料表指令碼

應用場景 公升級access資料庫到mssql資料庫,id自增需要調整為跟access資料庫中的自增欄位一樣的編號,導致需要不斷的新增記錄跟刪除表重新測試.技術要點 sql游標和變數使用。注意場合 請注意刪除前一定要做資料庫備份,刪除資料後會導致資料庫中所有的資料表和表中的記錄資料丟失,沒備份千萬不...

SQL批量刪除語句,SQL刪除所有資料

sp msforeachtable delete from execute sp msforeachtable truncate table 定義游標 declare tables cursor cursor for select name from sysobjects where type u ...