1

在 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),可以在SYS.SYSINDEX视图中的 index_name 列中看到该值,并且该值在所有数据库中将保持唯一。

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

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

4

1 回答 1

1

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

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

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

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

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

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

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

于 2012-08-31T08:21:31.220 回答