删除Sybase ASE中的所有表,包括具有约束的表

时间:2012-09-24 21:38:43

标签: sybase-ase

在不删除数据库的情况下,在Sybase ASE中完全删除数据库中所有表的最佳方法是什么?我一直在使用脚本:from this question但是由于参照完整性,我在尝试删除数据库中的所有表时遇到错误。

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

有没有办法在Sybase ASE中执行此操作,还是可以扩展上述脚本以循环约束?

3 个答案:

答案 0 :(得分: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 '+@table+' drop '+@constraint
    exec( @SQL)
    fetch cur into @constraint,@table 

  end
close cur
deallocate cursor cur

接下来你可以删除表格。

答案 1 :(得分: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 '+@table+' drop constraint '+@constraint
    exec( @SQL)
    fetch cur into @constraint,@table 
    --
  end
close cur
deallocate cursor cur

答案 2 :(得分:0)

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

  1. 在第3行使用类似constriantName和tableName的内容
  2. 查询缺少“约束”,正确查询: 'alter table'+ @table +'drop constraint'+ @ constraint