SQL刪除數據庫里所有表的外鍵,同時刪除所有用戶表


刪除所有的用戶表的外鍵,直接將下面的代碼拷貝到數據庫里執行即可:

--查詢刪除前的當前數據庫所有約束
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) 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM