2012-08-30 154 views
1

下探唯一約束當拖放在Sybase Central唯一約束,顯示下降語句如下;按名稱

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約束到位約束名,並接收指示約束沒有發現錯誤。

如何退出使用索引名稱,而不是約束名的唯一約束?

+0

也許這並不能回答你的問題,但你應該一直爲你創建的每個約束分配一個明確的名字,這樣你就不會遇到這樣的情況。 –

回答

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()?這是一個瘋狂的猜測雖然

+0

是的,你是對的。要刪除約束條件,您需要使用alter table :) –