2010年4月28日 星期三

刪除資料庫中所有資料表的資料

[code:tsql]
select
distinct 表格名稱
into #LISTTABLES
from
(
SELECT
Top 100 PERCENT
a.TABLE_NAME as 表格名稱
FROM
INFORMATION_SCHEMA.TABLES a
LEFT JOIN INFORMATION_SCHEMA.COLUMNS b ON ( a.TABLE_NAME=b.TABLE_NAME )
WHERE
a.TABLE_TYPE='BASE TABLE'
and a.TABLE_NAME != 'sysdiagrams'
ORDER BY
a.TABLE_NAME, ordinal_position) c;


declare
@tablename nvarchar(max)

declare icur cursor static for select * from #LISTTABLES

OPEN icur

fetch next from icur into @tablename
while(@@FETCH_STATUS=0)
BEGIN

-- 使用 TRUNCATE 最快,且會將表格中的自動編號欄位歸零
-- 但若表格有被參考 Foreign Key 的話,會無法使用 TRUNCATE 指令
exec ('TRUNCATE TABLE ' + @tablename);

-- 如果 TRUNCATE 不成功,還可以用 DELETE 刪除所有資料
exec ('delete from ' + @tablename + ' where 1=1');

-- 使用 DELETE 不會將自動編號的欄位歸零,使用 DBCC CHECKIDENT 指令歸零
exec ('DBCC CHECKIDENT(''' + @tablename + ''', RESEED, 0)');

FETCH NEXT FROM icur INTO @tablename
END

close icur
deallocate icur

drop table #LISTTABLES
[/code]

1 則留言:

匿名 提到...

alter table SUPPLIER disable trigger all;
delete FROM SUPPLIER ;
alter TABLE SUPPLIER enable trigger all;
DBCC CHECKIDENT('SUPPLIER',RESEED,0);