簡體   English   中英

按名稱刪除唯一約束

[英]dropping unique constraint by name

在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)可以在SYS.SYSINDEX視圖的index_name列中看到該值,並且該值在所有數據庫中都將保持唯一。

我試圖刪除通過index_name代替約束名稱的約束,並收到一條錯誤消息,指出未找到約束。

如何使用索引名稱而不是約束名稱來刪除唯一約束?

我認為,即使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()? 不過那是一個瘋狂的猜測

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM