GBase 8s
其他
问答
sysconstraints表主键名称如何跟字段关联
发表于2024-11-06 18:39:30116次浏览7个评论
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【GBase版本】:GBase8sV8.8_AEE_3.3.0_2_36477d
【操作系统】: windows2016
【CPU】:8C16G
【问题描述】*:我的需求是获取所有表及字段的元数据,在获取字段是否为主键时发现字段无法跟sysconstraints表的主键名称(constrname)关联起来,在系统表中没找到中间表,是我遗漏了吗,如果遗漏了麻烦大佬补充一下中间表,还是有其余的获取字段是否为主键的方法,麻烦大佬答疑,感谢!
评论
登录后才可以发表评论
liaosnet发表于 1年前
通过systables表的tabid 与sysconstraints关联, 再通过sysconstraints的 idxname与sysindexes视图关联,part1 至part16 (负数表示 desc,正数表示 asc)对应的是syscolumns的colno。
liaosnet发表于 1年前
@liaosnet:给个示例:
SELECT t.tabname,ce.colname,ce.colno,
CASE WHEN ce.colno = abs(ix.part1) OR ce.colno = abs(ix.part2) OR ce.colno = abs(ix.part3) OR ce.colno = abs(ix.part4) OR
ce.colno = abs(ix.part5) OR ce.colno = abs(ix.part6) OR ce.colno = abs(ix.part7) OR ce.colno = abs(ix.part8) OR
ce.colno = abs(ix.part9) OR ce.colno = abs(ix.part10) OR ce.colno = abs(ix.part11) OR ce.colno = abs(ix.part12) OR
ce.colno = abs(ix.part13) OR ce.colno = abs(ix.part14) OR ce.colno = abs(ix.part15) OR ce.colno = abs(ix.part16)
THEN 'PRI'
ELSE ''
END KEY
FROM systables t
LEFT JOIN syscolumns ce ON t.tabid = ce.tabid
LEFT JOIN sysconstraints cs ON t.tabid = cs.tabid AND cs.constrtype = 'P'
LEFT JOIN sysindexes ix ON cs.idxname = ix.idxname
WHERE t.tabname = 'tab2'
SELECT t.tabname,ce.colname,ce.colno,
CASE WHEN ce.colno = abs(ix.part1) OR ce.colno = abs(ix.part2) OR ce.colno = abs(ix.part3) OR ce.colno = abs(ix.part4) OR
ce.colno = abs(ix.part5) OR ce.colno = abs(ix.part6) OR ce.colno = abs(ix.part7) OR ce.colno = abs(ix.part8) OR
ce.colno = abs(ix.part9) OR ce.colno = abs(ix.part10) OR ce.colno = abs(ix.part11) OR ce.colno = abs(ix.part12) OR
ce.colno = abs(ix.part13) OR ce.colno = abs(ix.part14) OR ce.colno = abs(ix.part15) OR ce.colno = abs(ix.part16)
THEN 'PRI'
ELSE ''
END KEY
FROM systables t
LEFT JOIN syscolumns ce ON t.tabid = ce.tabid
LEFT JOIN sysconstraints cs ON t.tabid = cs.tabid AND cs.constrtype = 'P'
LEFT JOIN sysindexes ix ON cs.idxname = ix.idxname
WHERE t.tabname = 'tab2'
最佳回答
GBase用户24519发表于 1年前
@liaosnet:好的,我试下
liaosnet发表于 1年前
@GBase用户24519:或者关注syscolumns表的colattr字段值,该值为128表明为 主键非空 字段。
GBase用户24519发表于 1年前
@liaosnet:最开始我采用的这个方式,但是有一个数据库应该是迁移造成的colattr值全是0
liaosnet发表于 1年前
@GBase用户24519:那应该是丢失了这个主键。
曾浩轩发表于 2个月前
等待有缘人解答。
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25044
- 42023-09-25浏览数:18519
- 52020-05-11浏览数:17526