清空数据库错误:因为该表正由 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楼

时间: 2024-10-29 19:08:15

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

sql数据库删除表的外键约束(INSERT 语句与 FOREIGN KEY 约束"XXX"冲突。该冲突发生于数据库"XXX",表"XXX", column 'XXX)

使用如下SQL语句查询出表中外键约束名称: 1 select name 2 from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id 3 where f.parent_object_id=object_id('表名') 执行如下SQL语句删除即可. 1 alter table 表名 drop constraint 外键约束名 sql数据库删除表的外键约束(INSERT 语句与 F

配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法

今天遇到了这个问题, 电脑系统:vs2010 win7系统 iis7 我运行在iis中配置的那个网站后,报错:错误代码 0x800700b7 配置错误定义了重复的"system.web.extensions/scripting/scriptResourceHandler"节 这个问题原因在于window7的IIS默认用的是ASP.NET v4.0应用程序池. 解决方法:把这个网站的应用程序池的.netframework版本改为 v2.0的,如图: 1:选中应用程序池-->在右侧右

mysql如果在使用多表连查时,两张或多张表出现相同的字段名的解决办法

多表查询时,mysql语句为: select a.*,b.* from 表A名 as a left join 表B名 as b on a.字段名=b.字段名; 当出现两个相同字段名字时,比如相同字段名为name,就可以a.name as aname,b,name as bname; 语句为: select a.name as aname,b.name as bname from as a left join 表B名 as b on a.字段名=b.字段名; mysql如果在使用多表连查时,两张或

MySQL数据库操作3-数据表操作1-创建,约束

创建数据表: 代码: create table 表名 ( 字段1 数据类型 [列级别约束条件][默认值], 字段2 数据类型 [列级别约束条件][默认值], ...... [表级别约束条件] ); 注意: 1.表名不区分大小写, 2.[]内的为可选项. 示例: create table tb_emp1 ( id int(11), name varchar(25), deptId int(11), salary float ); 主键约束: 主键约束要求主键字段上的数据唯一. 单字段主键: 字段1

更改具有Foreign key约束的表

1.Foreign key 说明: foreign key(外键) 建立起了表与表之间的约束关系,让表与表之间的数据更具有完整性和关联性.设想,有两张表A.B,A表中保存了许多电脑制造商的信息,比如联想.戴尔.惠普和华硕,B表中保存了许多多型号的电脑,比如lenovo1,lenovo2,hp1,hp2,hp3,dell1,dell2,asus1,现在如何将两张具有从属关系(每个电脑品牌下都有很多型号的电脑)的表关联起来呢? 我们可以在B表中设置外键.首先我们给这个外键关联关系起个名字xx,外键作

js-serialize()序列化表单,中文出现乱码的解决办法

今天遇到js序列化表单,中文乱码的问题,不知道是不是jq的bug, 终于找到解决办法,可以调用decodeURIComponent(XXX,true);将数据解码, 比如:var data = $('#theFrom').serialize(); data_params = decodeURIComponent(data,true); 如此即可解决中文乱码问题.

数据库中的參照完整性(Foreign Key)

之前在项目中遇到了这样一个问题,我举得简单的样例来说明. 比方我们有两个表,一个表(department)存放的是部门的信息,比如部门id,部门名称等:还有一个表是员工表(staff),员工表里面肯定要存放每一个员工所在的部门. 那问题来了,假设我们这个时候删除了部门表中的某条记录,在staff表中会发生什么? 为了解答上面的问题,让我们先来回想一下什么是參照完整性. 我们经常希望保证在一个关系中给定属性集上的取值也在还有一个关系的特定属性集的取值中出现.这样的情况称为參照完整性(referen

SQLServer清空数据库中所有的表并且ID自动归0

exec sp_MSforeachtable 'Truncate Table ?'

[转]MyBatis动态传入表名,字段名参数的解决办法

一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这种情况下,就需要构建sql来动态传入表名.字段名了.现在对解决方法进行下总结,希望对遇到同样问题的伙伴有些帮助. 动态SQL是mybatis的强大特性之一,mybatis在对sql语句进行预编译之前,会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态sql进行处理.下面让我们先