我正在学习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 = ?
它给了我结果。
在对表进行测试时,我尝试添加新状态,它们使用列名而不是*显示在查询中,但旧记录仍然缺失。
我对发生的事情一无所知,有没有人有想法?
提前致谢,抱歉我的英语不好。
答案 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