清空数据库错误:因为该表正由 FOREIGN KEY 约束引用 解决办法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了清空数据库错误:因为该表正由 FOREIGN KEY 约束引用 解决办法相关的知识,希望对你有一定的参考价值。

如下解决了五个问题 
1. 清空数据 
2. 有外键也可以, 因为是逆向删除, 从最后一张表删除. 且使用的是delete, 因为truncate不能对有外键的表 
3. 种子问题, 如果表存在种子重设为0, 如不存在就不操作 
4. 加了事务, 中间报错, 有后悔机会 
5. 截断日志功能, 因为使用delete, 删除后日志文件会增大, 可以不使用

if( object_id(pr_DataClear) is not null )  
    drop procedure pr_DataClear  
go  
create procedure pr_DataClear  
as  
begin transaction  
    declare @cTblName varchar(128)  
    declare cur_Clear cursor for select rtrim(name) from sysobjects where type = U order by crdate desc  
    open cur_Clear  
    declare @cSQL varchar(255)  
    fetch next from cur_Clear into @cTblName  
    while( @@fetch_status = 0)  
    begin  
        set @cSQL = delete from  + @cTblName  
        print @cSQL  
        exec( @cSQL )  
        if( ident_seed(@cTblName) is not null )  
        begin  
            dbcc checkident( @cTblName, reseed, 0 )  
            print 有种子且成功重置为1  
        end  
        fetch next from cur_Clear into @cTblName  
    end  
    close cur_Clear  
    deallocate cur_Clear  
commit  
go  
-- 清空所有表数据  
exec pr_DataClear  
-- 截断日志  
backup log LZ的数据库 with no_log  
dbcc shrinkdatabase( LZ的数据库 )  
dbcc updateusage( LZ的数据库 )  
-- 查看表空间(概数)  
select object_name(id) as 表名, (rtrim(8*reserved/1024) + MB) as 总量, (rtrim(8*dpages/1024) + MB) as 已使用,  
    (rtrim(8*(reserved-dpages)/1024) + MB) as 未使用, (rtrim(8*dpages/1024-rows/1024*minlen/1024) + MB ) as 空隙  
    from sysindexes  
    where indid=1  
    order by reserved desc  

原文出处:http://topic.csdn.net/u/20090816/17/EE0FA21E-8616-4236-A9CB-8C5A3D45C9D9.html 中45楼

 

以上是关于清空数据库错误:因为该表正由 FOREIGN KEY 约束引用 解决办法的主要内容,如果未能解决你的问题,请参考以下文章

ruby test_not_null_database_foreign_keys_with_rspec_2.rb

ruby test_not_null_database_foreign_keys_with_rspec_1.rb

ruby test_not_null_database_foreign_keys_with_rspec_0.rb

IOException:进程无法访问pdf文件,因为它正由另一个进程使用

mysql 错误汇总

删除提示 FOREIGN KEY 约束引用”