设置完整性后,Db2选择某些列不起作用

时间:2012-05-29 04:20:21

标签: database select db2

我正在学习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控制中心中使用了set integrity,并且该过程成功,但现在我的查询没有给我任何结果。

我尝试使用:

SELECT * 
FROM Tables.State 
Where IdCountry = ? 

它给了我结果。

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

我对发生的事情一无所知,有没有人有想法?

提前致谢,抱歉我的英语不好。

1 个答案:

答案 0 :(得分: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