Sybase-Sql-Anywhere

SQLAnywhere:重命名外鍵或主鍵

  • August 15, 2014

我有一個包含許多重複索引、外鍵和主鍵名稱的數據庫。可以使用以下方法重命名重複的索引名稱:

ALTER INDEX <index name> ON <creator>.<tablename> RENAME TO <new name>

所以這是固定的。

但是鍵不是索引,因此它不適用於鍵:

"Cannot find index named '<index name>'"

有一個約束重命名語法:

ALTER TABLE <creator>.<tablename> RENAME CONSTRAINT <constraint name> TO <new name>

這也不適用於鍵:

"Constraint '<constraint name>' not found"

有沒有辦法在 SQLAnywhere 中重命名外鍵或主鍵而不刪除和重新創建鍵?

你沒有說你使用的是哪個版本的 SQL Anywhere,但在 16 中我認為你可以使用 ALTER INDEX 來做你想做的事。從幫助:

ALTER INDEX 語句

重命名索引、主鍵或外鍵,或更改索引的聚集性質。

句法

ALTER { INDEX索引名稱

| [索引]外鍵角色名

| [索引]主鍵}

$$ owner. $$對象名稱 {重建| 重命名子句 | 集群子句 } 對象名:表名 | 物化視圖名稱

重命名子句:重命名{ AS | TO } 新索引名稱

集群子句:集群| 非集群的

參數

rename-clause 指定索引、主鍵或外鍵的新名稱。

重命名外鍵或主鍵的基礎索引時,索引的相應 RI 約束名稱不會更改。但是,外鍵角色名稱(如果適用)與索引名稱相同並已更改。如有必要,使用 ALTER TABLE 語句重命名 RI 約束名稱。

cluster-clause 指定索引是否應更改為 CLUSTERED 或 NONCLUSTERED。一張表上只能有一個索引可以聚集。

REBUILD 子句 使用此子句重建索引,而不是刪除並重新創建它。

評論

ALTER INDEX 語句執行兩項任務:

它可用於重命名索引、主鍵或外鍵。

它可用於將索引類型從非聚群更改為聚群,反之亦然。

ALTER INDEX 語句可用於更改索引的分群規範,但不會重新組織數據。同樣,每個表或物化視圖只能聚集一個索引。

ALTER INDEX 不能用於更改本地臨時表上的索引。嘗試這樣做會導致 Index not found 錯誤。

當使用 WITH HOLD 子句打開的游標使用語句或事務快照時,無法執行此語句。

請注意它所說的使用 ALTER TABLE 語句在需要時重命名約束名稱。如果您需要更多幫助,請嘗試http://sqlanywhere-forum.sap.com/上的專用 SQL Anywhere 論壇

引用自:https://dba.stackexchange.com/questions/74048