2012-09-24 38 views
1

在不删除数据库的情况下完全删除Sybase ASE中数据库中的所有表的最佳方法是什么?我一直在使用脚本:from this question,但由于参照完整性,我尝试删除数据库中的所有表。删除Sybase ASE中的所有表(包括那些有约束的表)

在MySQL中,我可以使用SET FOREIGN_KEY_CHECKS = 0

有没有办法在Sybase ASE的做到这一点还是可以在上面的脚本通过约束扩展到循环?

回答

2

首先,你必须放弃约束:

declare cur cursor 
for 
    select SOR.Name as constraint, SOT.Name as table 
    from sysreferences SR 
    join sysobjects SOR on SOR.id = SR.constrid 
    join sysconstraints SC on SC.constrid = SR.constrid 
    join sysobjects SOT on SOT.id = SC.tableid 
go 
declare @constraint varchar(500) 
declare @table varchar(500) 
declare @SQL varchar(500) 

open cur 
fetch cur into @constraint,@table 
    while (@@sqlstatus = 0) 
    begin 

    select @SQL = 'alter table '[email protected]+' drop '[email protected] 
    exec(@SQL) 
    fetch cur into @constraint,@table 

    end 
close cur 
deallocate cursor cur 

接下来,您可以删除表。

0

上述逻辑正确,但查询错误,您可能会遇到“约束”和“表”关键字的问题。

  1. 使用类似constriantName和表名的3线
  2. 查询缺少 “约束”,正确的查询: '改变表' + @table + '下降约束' + @约束
1

删除接受的答案中的所有约束的过程对我来说不起作用。这是一个修改后的版本,适用于我的ASE16。

BEGIN 
declare cur cursor 
for 
    select o.name, t.name from sysreferences r 
    join sysobjects o on o.id = r.constrid 
    join sysconstraints c on c.constrid = r.constrid 
    join sysobjects t on t.id = c.tableid 
END 
GO 
-- 
declare @constraint varchar(500) 
declare @table varchar(500) 
declare @SQL varchar(500) 
-- 
open cur 
fetch cur into @constraint,@table 
    while (@@sqlstatus = 0) 
    begin 
    -- 
    select @SQL = 'alter table '[email protected]+' drop constraint '[email protected] 
    exec(@SQL) 
    fetch cur into @constraint,@table 
    -- 
    end 
close cur 
deallocate cursor cur 
相关问题