0

我正在学习 DB2,但在测试我的数据库中的一些选项时遇到了问题。

我有 2 个这样的表:

Country
=========
IdCountry  -- PK
Name

State
=========
IdState  -- PK
IdCountry  -- FK to Country.IdCountry
Name
Code

我正在使用以下查询:

SELECT IdState, Name 
FROM Tables.State 
WHERE IdCountry = ? 

在哪里 ?是否正常工作IdCountry,一切正常。

然后我在我的 db2 控制中心使用选项中的默认信息设置完整性,并且该过程成功但现在我的查询没有给我任何结果。

我尝试使用:

SELECT * 
FROM Tables.State 
Where IdCountry = ? 

它给了我结果。

在对表进行测试时,我尝试添加新状态,它们使用列名而不是 * 出现在查询中,但旧记录仍然丢失。

我不知道发生了什么,有人知道吗?

在此先感谢,并为我糟糕的英语感到抱歉。

4

1 回答 1

0

我在这里假设您使用的是 Linux/Unix/Windows DB2,因为 z/OS 没有SET INTEGRITY命令,而且我在 iSeries 信息中心快速搜索也找不到任何关于它的信息。


您的表可能仍处于“设置完整性待定”状态(以前称为CHECK PENDING)。SYSCAT.TABLES您可以通过使用此查询进行检查来测试该理论:

SELECT TRIM(TABSCHEMA) || '.' || TRIM(TABNAME) AS tbl,
       CASE STATUS
            WHEN 'C' THEN 'Integrity Check Pending'
            WHEN 'N' THEN 'Normal'
            WHEN 'X' THEN 'Inoperative'
       END As TblStatus
FROM SYSCAT.TABLES
WHERE TABSCHEMA NOT LIKE 'SYS%'

如果您的表格出现,您将需要使用该SET INTEGRITY命令将您的表格置于检查状态:

SET INTEGRITY FOR Tables.State IMMEDIATE CHECKED
于 2012-05-29T17:38:57.297 回答