当前位置: 首页 > 知识库问答 >
问题:

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

阎麒
2023-03-14

在Sybase ASE中完全删除数据库中的所有表而不删除数据库的最佳方法是什么?我一直在使用一个脚本:从这个问题开始,由于引用完整性,我试图删除数据库中的所有表时出错。

在MySQL中,我可以使用SETFOREIGN_KEY_CHECKS=0

有没有办法在Sybase ASE中实现这一点,或者可以扩展上面的脚本来循环约束?

共有3个答案

赵志
2023-03-14

上面的逻辑是正确的,但查询是错误的,您可能会遇到“constraint”和“table”关键字的问题。

  1. 在第3行使用constriantName和tableName
  2. 查询缺少"约束",正确查询:"改变表"@表"删除约束"@约束
徐兴昌
2023-03-14

放弃已接受答案中所有约束的程序对我不起作用。这是一个在我的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
阎成天
2023-03-14

首先,您必须删除约束:

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

接下来你可以放下桌子。

 类似资料:
  • 问题内容: 我正在尝试从多个表中删除。这是我的桌子的样子 给定B中的记录ID,我试图删除A_has_B,B和C_has_B中的所有行。我将MySQL与innodb存储引擎配合使用,并为A_has_B和C_has_B定义了引用B中ID的外键。 我正在尝试执行删除操作,如下所示: 问题是当我执行查询时,mysql抱怨: 我该如何解决这个问题? 问题答案: 最简单的方法是分别从每个表中删除: MySQL

  • 我有一个UIView,它通过几个约束被放置在屏幕上。一些约束由superview拥有,另一些约束由其他祖先拥有(例如,可能是UIViewController的view属性)。 要澄清这些解决方案的问题,请考虑以下视图层次结构: 爷爷 父亲 我 儿子 女儿 现在假设我们创建了以下约束,并始终将它们附加到它们最近的共同祖先: null

  • 我有这样布局的模型: 这里的场景是我永远不希望用户删除数据。相反,删除只会隐藏记录。但是,我仍然希望所有非软删除的记录都遵循唯一的键约束。基本上,我希望有尽可能多的重复的已删除记录,但只有一个唯一的未删除记录可以存在。所以我本来想包括“已删除”字段(由django安全删除库提供),但问题是Django的唯一检查因“psycopg2”而失败。完整性错误:重复的键值违反了 ['field2', 'fi

  • 问题内容: 如何使用JDBC删除Apache Derby DB上架构中的所有表? 问题答案: 有关执行此操作的实际代码,请检查Derby发行版的Derby测试套件部分中的CleanDatabaseTestSetup.java。

  • 问题内容: 我创建了许多对象,然后将它们存储在列表中。但是我想在一段时间后删除它们,因为我创建了一个新闻,并且不希望我的内存过高(就我而言,如果不删除它,它会跳到20 gigs的内存)。 这里有一些代码来说明我要做什么: A和B是我的对象。C是这两个对象的列表。我正在尝试使用C中的for循环将其删除:一次是使用DEL,另一次是使用一个函数。它似乎不起作用,因为打印继续显示对象。 我需要这个,因为我

  • 问题内容: 我想从表中删除约束。我的查询是: 但我得到一个错误: -您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在第1行的’constraint ‘ 附近使用正确的语法 问题答案: Mysql具有用于删除外键约束的特殊语法: