SQL刪除資料庫裡所有表的外來鍵,同時刪除所有使用者表

jiangys發表於2013-09-16

刪除所有的使用者表的外來鍵,直接將下面的程式碼拷貝到資料庫裡執行即可:

--查詢刪除前的當前資料庫所有約束
select * from information_schema.key_column_usage
 
declare @TableName nvarchar(250)
--宣告讀取資料庫所有資料表名稱遊標mycursor1
declare mycursor1 cursor for select name from dbo.SysObjects WHERE OBJECTPROPERTY(ID, 'IsUserTable') = 1
 --開啟遊標
open mycursor1 
--從遊標裡取出資料賦值到我們剛才宣告的資料表名變數中
fetch next from mycursor1 into @TableName 
--如果遊標執行成功  
while (@@fetch_status=0) 
begin  
 --定義當前外來鍵約束變數
declare @ConstraintName varchar (200)
 
--刪除當前資料表的所有外來鍵約束
 
--宣告讀取資料表所有外來鍵約束名稱遊標mycursor2
declare mycursor2 cursor for select name from dbo.sysobjects where Xtype = 'F' and Parent_Obj = (select [ID]  from dbo.sysobjects where id = object_id(N'['+@TableName+']')  and OBJECTPROPERTY(id, N'IsUserTable') = 1)
--開啟遊標
open mycursor2 
--從遊標裡取出資料賦值到外來鍵約束名稱變數中
fetch next from mycursor2 into @ConstraintName 
--如果遊標執行成功  
while (@@fetch_status=0) 
begin 
--刪除當前找到的外來鍵
exec ('ALTER TABLE '+@TableName+' DROP CONSTRAINT '+@ConstraintName)
--print 'ALTER TABLE '+@TableName+' DROP CONSTRAINT '+@ConstraintName
--用遊標去取下一條記錄
fetch next from mycursor2 into @ConstraintName
end
 
--關閉遊標
close mycursor2 
--撤銷遊標
deallocate mycursor2
 
 --用遊標去取下一條記錄
    fetch next from mycursor1 into @TableName
end
 
--關閉遊標
close mycursor1 
--撤銷遊標
deallocate mycursor1
 
--查詢刪除後的當前資料庫所有約束
select * from information_schema.key_column_usage

 刪除所有的資料表,也是直接執行下面的程式碼:

declare @sql varchar(8000)

SELECT @sql='drop table ' + name 
FROM sysobjects
WHERE (type = 'U')
ORDER BY 'drop table ' + name

exec(@sql) 

 

 

 

相關文章