Derbyサーバーでは、各表の制約名を取り出すために、スキーマのシステム表の情報を使用してselect文を作成する方法はありますか?Derby - 制約
5
A
答えて
6
関連マニュアルはDerby Reference Manualです。多くのバージョンが利用可能である:10.13は2017年4月に現在のだったが、ダービーの十分最近のバージョンは、システム・カタログ表ことを必要とするので、それはオリジナルの答え
SELECT c.constraintname, t.tablename
FROM sysconstraints c, systables t
WHERE c.tableid = t.tableid;
2009年5月に10.3
ました(10.13はcommentにkiwicomb123で引用されている)、あなたも表記を、JOIN、および使用明示的に使用するようにクエリを修正することができますsys.
を前置されています
SELECT c.constraintname, t.tablename
FROM sys.sysconstraints c
JOIN sys.systables t
ON c.tableid = t.tableid;
余分な列を追加できます(たとえば、c.type
)。制約の種類を取得できます。
2
SELECT sc.schemaname, co.constraintname, t.tablename, cg.descriptor, t2.tablename, cg2.descriptor, f.deleterule, f.updaterule
FROM sys.sysconstraints co
JOIN sys.sysschemas sc ON co.schemaid = sc.schemaid
JOIN sys.systables t ON co.tableid = t.tableid
JOIN sys.sysforeignkeys f ON co.constraintid = f.constraintid
JOIN sys.sysconglomerates cg ON f.conglomerateid = cg.conglomerateid
JOIN sys.sysconstraints co2 ON f.keyconstraintid = co2.constraintid
JOIN sys.systables t2 ON co2.tableid = t2.tableid
JOIN sys.syskeys k ON co2.constraintid = k.constraintid
JOIN sys.sysconglomerates cg2 ON k.conglomerateid = cg2.conglomerateid
WHERE co.type = 'F'
and sc.schemaname = current schema
2つの記述子エントリは
BTREEように、各テーブルの列番号のリストが含まれている数字はためSYSCOLUMNSテーブルの列番号に対応する(2,1)
対応する表。
誰もがこのクエリでこれを抽出する優雅な方法を持っている場合、私は知りたいと思います。私は、別のクエリでテーブルのすべての列のリストを取得しており、数値を取得するためにディスクリプタを解析した後に名前を抽出しています。
関連する問題
- 1. UNIQUE制約にHibernate
- 2. 制約
- 3. 制約
- 4. 制約
- 5. 制約
- 6. 制約
- 7. FactoryGirl - ユニーク制約
- 8. ElasticSearch ID制約
- 9. MVCルーティング制約
- 10. パラメータの制約
- 11. Oracleの制約
- 12. 制約のチェック
- 13. PIP制約ファイル
- 14. SQL Server - 制約
- 15. チェック制約
- 16. 'Existing Entity'制約
- 17. SQLServer2000制約
- 18. 制約問題
- 19. ジェネリックインターフェイスの制約
- 20. チェック制約
- 21. 親子制約
- 22. ジェネリック制約
- 23. UITableViewCell制約
- 24. 設定制約
- 25. クエリオプティマイザとFK制約
- 26. MySQLとチェック制約
- 27. TSQL列の制約
- 28. セキュリティ制約、ウェルカム・ファイル
- 29. Alembic + Sqlalchemyマルチカラムユニーク制約
- 30. PostgreSQLの制約が
制約タイプを知る方法もありますか? –
私はあなたのためにRTFMできると思います。 Sysconstraints.Typeは、 'U'(ユニーク)、 'P'(プライマリ)、 'F'(外部キー)または 'C'(チェック)のいずれかの値を持つCHAR(1)フィールドです。しかし、ドキュメントへのポインタが与えられたときには、通常、ドキュメントを読んで読むのが賢明です。 –
この問合せはDerby 10.13では機能しません。テーブル名sysconstraintsとsysconstraintsの前に "sys"を付ける必要があります。例:sysconstraintsではなくsys.sysconstraintsを使用します。 – kiwicomb123