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