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

  • 相关阅读:
    单例模式
    Java多线程小例子(三个窗口卖火车票)
    HashMap和HashTable的区别
    javascript操作对象的方法
    javascript基本语法
    其他标签
    头标签
    label标签
    表单标签
    IO流-LineNumberReader
  • 原文地址:https://www.cnblogs.com/systemnet123/p/3045417.html
Copyright © 2020-2023  润新知