Von einer Sybase-Datenbank, wie kann ich Tabelle Beschreibung (Feldnamen und -typen) bekommen?
-
07-07-2019 - |
Frage
Ich habe Zugang zu Befehlszeile isql und Ich mag Meta-Daten aller Tabellen einer bestimmten Datenbank erhalten, möglicherweise in einer formatierten Datei. Wie kann ich das erreichen?
Danke.
Lösung
Überprüfen Sie sysobjects und syscolumns Tabellen.
Hier ist ein Diagramm von Sybase-Systemtabellen.
Eine Liste aller Benutzertabellen:
SELECT * FROM sysobjects WHERE type = 'U'
Sie können 'U' ändern, um andere Aufgaben:
- C - berechnete Spalte
- D - default
- F - SQLJ Funktion
- L - log
- N - Partition Zustand
- P - Transact-SQL oder SQLJ Prozedur
- PR - vorbereiten Objekte (erstellt von Dynamic SQL)
- R - Regel
- RI - Verweisbeschränkung
- S - Systemtabelle
- TR - Trigger
- U - Benutzertabelle
- V - Ansicht
- XP - erweiterte gespeicherte Prozedur
Liste der Spalten in einer Tabelle:
SELECT sc.*
FROM syscolumns sc
INNER JOIN sysobjects so ON sc.id = so.id
WHERE so.name = 'my_table_name'
Andere Tipps
sp_help
ist das, was Sie suchen.
Von Sybase-Online-Dokumentation auf dem sp_help Systemprozedur:
Beschreibung:
Gibt Informationen über ein Datenbankobjekt (jedes Objekt in sysobjects aufgeführt) und über System- oder benutzerdefinierte Datentypen sowie berechnete Spalten und funktionsbasierte Indizes. Spalte zeigt optimistic_index_lock .
Syntax
sp_help [objname]
[...]
Hier ist die (teilweise) Ausgabe für die Tabelle publishers (eingefügt von Mit sp_help auf Datenbankobjekte ):
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
Still zitiert Mit sp_help auf Datenbankobjekte :
Wenn Sie sp_help ausführen, ohne einen Objektnamen liefert, der daraus resultierende Bericht zeigt jedes Objekt in sysobjects, zusammen mit seinem Namen, Eigentümer und Objekttyp. Ebenfalls gezeigt ist jeder benutzerdefinierten Datentyps in systypes und seinen Namen, Speichertyp, Länge, ob Nullwerte erlaubt sind, und die Erfüllung der Regeln oder an sie gebunden. Der Bericht stellt auch fest, ob irgendwelche Primär- oder Fremdschlüssel-Spalten haben für eine Tabelle oder Sicht definiert.
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'
Sie können für Spalte in allen Tabellen in der Datenbank suchen mit:
SELECT so.name
FROM sysobjects so
INNER JOIN syscolumns sc ON so.id = sc.id
WHERE sc.name = 'YOUR_COLUMN_NAME'
sp_tables
wird auch in isql arbeiten. Es gibt Ihnen die Liste der Tabellen in der aktuellen Datenbank.
Wenn Tabelle Benutzer zu finden, für den Fall, wenn der Tabelleneigentümer Name auch wollen, können Sie wie folgt vor:
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
Wenn Sie ein Kommandozeilen-Programm verwenden möchten, sind aber mit SQL nicht beschränkt, können Sie SchemaCrawler . SchemaCrawler ist Open Source und kann Dateien im Klartext, CSV produzieren, oder (X) HTML-Format.
Hier einen anderen Ansatz Meta-Daten zu erhalten. Dieser sehr hilfreich SQL-Befehl gibt Ihnen die Tabelle / View-Definition als Text:
SELECT Text aus syscomments WHERE ID = OBJECT_ID ( 'MySchema.MyTable') ORDER BY-Nummer, colid2, colid
Genießen Patrick
In der Sybase-Version ich verwende, die folgenden werden Liste der Spalten für ausgewählte Tabelle
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
Für Sybase ASE, sp_columns table_name werden alle Metadaten der Tabelle zurückkehren Sie suchen.
Wenn Sybase SQL-92-konform dann diese Informationen innerhalb der INFORMATION_SCHEMA-Tabellen gespeichert.
So folgendes wird Sie eine Liste von Tabellen und Ansichten in jeder SQL-92-kompatible Datenbank
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES