【问题标题】:dropping unique constraint by name按名称删除唯一约束
【发布时间】:2012-08-30 16:15:43
【问题描述】:

在 Sybase Central 中删除唯一约束时,显示的删除语句如下;

ALTER TABLE "DBA"."enr_rds_heating_control_validation_t" DROP CONSTRAINT "ASA826";

ASA826 在此处删除的约束来自 SYS.SYSCONSTRAINT 视图,其中值来自约束名称列。

这里的问题是,这是 Sybase 分配给约束的唯一标识符,并且仅对当前数据库有效,因此当针对另一个数据库运行时,此约束可能 a) 不存在或 b) 完全是不同的约束。

然而,在创建约束时,我们将其命名为 enr_rds_heating_control_validation_t UNIQUE (enr_rds_heating_type_id,enr_rds_heating_control_id),该值可以在 index_name 列的 SYS.SYSINDEX 视图中看到,并且该值在所有数据库中都将保持唯一。

我已尝试删除通过 index_name 传递的约束来代替约束名称,并收到指示未找到约束的错误。

如何使用索引名称而不是约束名称来删除唯一约束?

【问题讨论】:

  • 也许这不能回答您的问题,但您应该始终为您创建的每个约束分配一个明确的名称,这样您就不会遇到这样的情况。

标签: sql constraints sqlanywhere


【解决方案1】:

我认为您不能像删除索引一样删除约束,即使 Sybase 在物理上使用索引并且您在表上看到它作为 sp_help 报告的索引。

DROP INDEX 仅适用于使用 CREATE INDEX 创建的索引。用于你得到的约束:

不能将 DROP 与“abe.c”一起使用,因为“c”是一个约束。使用 ALTER TABLE。

听起来您想将 Sybase Central 创建的约束作为 SQL,然后批量使用 sql,但不是在 Sql 相关的数据库上 - 这不是您不能这样做的答案吗?

只要让使用此 Sql Central 输出的脚本“使用”正确的数据库,就可以了。

我无法准确理解您在做什么,但您似乎必须坚持使用 SQL Central 生成的内容。

或者后处理 Sql Central Sql 并在所有约束名称后缀 db_id()?不过这是一个疯狂的猜测

【讨论】:

  • 是的,你是对的。要删除约束,您需要使用 alter table :)
猜你喜欢
  • 2014-09-12
  • 2021-05-29
  • 2012-09-02
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
相关资源
最近更新 更多