簡體   English   中英

由於外鍵不存在,無法將主鍵添加到 AS400 表

[英]Cannot add a Primary Key to AS400 table because of foreign key that doesn't exist

我在 IBMi/System-i/iSeries/AS400 上有一個表,它沒有外鍵、主鍵或任何類型的約束。 我正在嘗試使用 SQL 添加主鍵:

ALTER TABLE MYLIB.TBLGB ADD CONSTRAINT MYLIB.R_MYLIB_PK_GB PRIMARY KEY (GBAPP, GBTSK, GBSET, GBSTP)

結果是:

Error: [SQL0538] The FOREIGN key in constraint R_MYLIB_PK_GB in MYLIB not same as the parent key. Cause. . . . . : The FOREIGN key in constraint R_MYLIB_PK_GB in MYLIB is not the same as the parent key of table *N in *N. The FOREIGN key must have the same number of columns as the parent key and the data type and attributes of the FOREIGN key must be identical to the data type and attributes of the corresponding column of the parent key. Recovery. . . : Correct the statement so that the description of the FOREIGN key conforms to that of the parent key of the specified table.

我對此感到非常困惑,因為肯定沒有鏈接到該表的外鍵。 事實上,我已經刪除了這個庫中所有表的所有約束。 我可以看什么來確定是什么阻止了它?

另一個有趣的細節是,這在其他基本相同的庫上運行良好......

使用DSPFDDSPDBR命令檢查文件描述和數據庫關系。

約束由模式限定。 因此,除非您還有一個名為 mylib 的模式,否則請刪除限定條件。

它抱怨表的原因可能是因為它試圖在模式 systables 中找到表,但這純粹是猜測。

很可能是保存和恢復的順序不正確。 該表具有不應保存且應在保存前刪除的屬性。 還原導致新系統上的數據庫目錄包含不一致的元素。

如果不是,那么下一個可能性(也是唯一的其他可能性)是數據庫目錄在恢復完成之前已經存在不一致。 這些可能是由不當關閉或其他操作引入的。

第一步應該是:

RCLDBXREF OPTION(*CHECK)

如果報告問題,請運行:

RCLDBXREF OPTION(*FIX)

如果系統對於 RCLDBXREF 命令來說太舊,請使用:

RCLSTG SELECT(*DBXREF)

舊版本沒有“*CHECK”選項。

根據數據庫的大小和復雜性、所需的重新同步次數以及服務器的一般性能特征,其中任何一個都可能運行 10 分鍾到幾小時不等。 大多數無法解釋的數據庫目錄問題(除了那些需要 PTF 的問題)都可以通過其中任何一個來解決。

RCLDBXREF 命令通常是首選,但某些問題將需要 RCLSTG 替代。 RCLSTG 存在重大限制,因此請務必閱讀命令 [Help]。

暫無
暫無

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

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