按名称删除唯一约束

时间:2012-08-30 16:15:43

标签: sql constraints sqlanywhere

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

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

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

这里的问题是这是由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的约束来代替约束名称,并收到一个错误,指出找不到约束。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

听起来你想要将Sybase Central创建的约束作为SQL,然后批量使用sql,但是Sql也不会对数据库使用 - 这不是你不能做到的答案吗? / p>

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

我无法准确理解你在做什么,但看起来你似乎必须坚持使用SQL Central产生的东西。

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