刪除所有的使用者表的外來鍵,直接將下面的程式碼拷貝到資料庫裡執行即可:
--查詢刪除前的當前資料庫所有約束 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)