1

Sybase Central でユニーク制約をドロップする場合、表示されるドロップ ステートメントは次のとおりです。

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

ここでドロップされる制約 ASA826 は、値が constraint_name 列から取得される 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 で作成されたインデックス専用です。あなたが得る制約で使用されます:

「c」は制約であるため、「abe.c」で DROP を使用できません。ALTER TABLE を使用します。

Sybase Central によって作成された制約を SQL として取得し、SQL を大量に使用したいようですが、SQL が関連するデータベースでは使用できません。それができないという答えではありませんか?

この Sql Central の出力を使用しているスクリプトで正しいデータベースを「使用」する限り、問題ありません。

何をしているのか正確にはわかりませんが、SQL Central が生成しているものに固執する必要があるようです。

または、Sql Central Sql を後処理し、すべての制約名に db_id() のサフィックスを付けますか? 勝手な推測ですが

于 2012-08-31T08:21:31.220 に答える