私はコマンドラインisqlにアクセスでき、特定のデータベースのすべてのテーブルのメタデータを、おそらくフォーマットされたファイルで取得したいと思います。どうすればそれを達成できますか?
ありがとう。
sysobjects および syscolumns テーブルを確認します。
ここ は、Sybaseシステムテーブルの図です。
すべてのユーザーテーブルのリスト:
SELECT * FROM sysobjects WHERE type = 'U'
「U」を他のオブジェクトに変更できます。
テーブル内の列のリスト:
SELECT sc.*
FROM syscolumns sc
INNER JOIN sysobjects so ON sc.id = so.id
WHERE so.name = 'my_table_name'
sp_help
はあなたが探しているものです。
sp_help システムプロシージャに関するSybaseオンラインドキュメントから:
説明
データベースオブジェクト(sysobjectsにリストされているオブジェクト)、システムまたはユーザー定義のデータ型、および計算列と関数ベースのインデックスに関する情報を報告します。列表示optimistic_index_lock。
構文
sp_help [objname]
[...]
次に、publishersテーブルの(部分的な)出力を示します( データベースオブジェクトでのsp_helpの使用 )から貼り付けました:
Name Owner Object_type Create_date
---------------- ----------- ------------- ------------------------------
publishers dbo user table Nov 9 2004 9:57AM
(1 row affected)
Column_name Type Length Prec Scale Nulls Default_name Rule_name
----------- ------- ------ ----- ------- ------- -------------- ----------
pub_id char 4 NULL NULL 0 NULL pub_idrule
pub_name varchar 40 NULL NULL 1 NULL NULL
city varchar 20 NULL NULL 1 NULL NULL
state char 2 NULL NULL 1 NULL NULL
Access_Rule_name Computed_Column_object Identity
------------------- ------------------------- ------------
NULL NULL 0
NULL NULL 0
NULL NULL 0
NULL NULL 0
まだ引用 データベースオブジェクトでsp_helpを使用 :
オブジェクト名を指定せずにsp_helpを実行すると、結果のレポートには、sysobjects内の各オブジェクトが、名前、所有者、オブジェクトタイプとともに表示されます。また、systypesの各ユーザー定義データ型とその名前、ストレージタイプ、長さ、null値を許可するかどうか、およびそれにバインドされたデフォルトまたはルールも示します。レポートは、テーブルまたはビューに主キー列または外部キー列が定義されているかどうかも示します。
Sybase IQ:
describe table_name;
SELECT
DB_NAME() TABLE_CATALOG,
NULL TABLE_SCHEMA,
so.name TABLE_NAME,
sc.name COLUMN_NAME,
sc.colid ORDINAL_POSITION,
NULL COLUMN_DEFAULT,
CASE WHEN st.allownulls=1 THEN 'YES'
ELSE 'NO'
END IS_NULLABLE,
st.name DATA_TYPE,
CASE WHEN st.name like '%char%' THEN st.length
END CHARACTER_MAXIMUM_LENGTH,
CASE WHEN st.name like '%char%' THEN st.length
END*2 CHARACTER_OCTET_LENGTH,
CASE WHEN st.name in ('numeric','int') THEN st.length
END NUMERIC_MAXIMUM_LENGTH,
CASE WHEN st.name in ('numeric','int') THEN st.prec
END NUMERIC_PRECISION,
NULL NUMERIC_PRECISION_RADIX,
CASE WHEN st.name in ('numeric','int') THEN st.scale
END NUMERIC_SCALE,
CASE WHEN st.name in ('datetime') THEN st.prec
END DATETIME_PRECISION,
NULL CHARACTER_SET_CATALOG,
NULL CHARACTER_SET_SCHEMA,
NULL COLLATION_CATALOG,
NULL COLLATION_SCHEMA,
NULL DOMAIN_CATALOG,
NULL DOMAIN_SCHEMA,
NULL DOMAIN_NAME
FROM
sysobjects so
INNER JOIN
syscolumns sc
ON sc.id = so.id
inner join systypes st on st.usertype = sc.usertype
WHERE so.name = 'TableName'
以下を使用して、データベース内のすべてのテーブルの列を検索できます。
SELECT so.name
FROM sysobjects so
INNER JOIN syscolumns sc ON so.id = sc.id
WHERE sc.name = 'YOUR_COLUMN_NAME'
ユーザーテーブルを検索するときに、テーブル所有者名も必要な場合は、次を使用できます。
select su.name + '.' + so.name
from sysobjects so,
sysusers su
where so.type = 'U' and
so.uid = su.uid
order by su.name,
so.name
sp_tables
はisqlでも機能します。現在のデータベース内のテーブルのリストが表示されます。
Sybase ASEの場合、sp_columns table_nameは、探しているすべてのテーブルメタデータを返します。
使用しているSybaseバージョンでは、選択したテーブルの列のリストを以下に示します
select *
FROM sys.syscolumns sc
where tname = 'YOUR_TABLE_NAME'
--and creator='YOUR_USER_NAME' --if you want to further restrict tables
--according to the user name that created it
ここでメタデータを取得する別のアプローチ。この非常に役立つSQLコマンドは、テーブル/ビューの定義をテキストとして返します。
Syscommentsからテキストを選択WHERE id = OBJECT_ID( 'MySchema.MyTable')ORDER BY番号、colid2、colid
パトリックを楽しむ
コマンドラインプログラムを使用したいが、SQLの使用に限定されない場合は、 SchemaCrawler を使用できます。 SchemaCrawlerはオープンソースであり、プレーンテキスト、CSV、または(X)HTML形式のファイルを生成できます。