it-swarm.com.de

Wie kann ich aus einer Sybase-Datenbank eine Tabellenbeschreibung (Feldnamen und -typen) abrufen?

Ich habe Zugriff auf die Befehlszeile isql und möchte Metadaten aller Tabellen einer Datenbank erhalten, möglicherweise in einer formatierten Datei. Wie kann ich das erreichen?

Vielen Dank.

23
aartist

Überprüfen Sie sysobjects und syscolumns tables.

Hier ist ein Diagramm der Sybase-Systemtabellen.

Liste aller Benutzertabellen:

SELECT * FROM sysobjects WHERE type = 'U'

Sie können 'U' in andere Objekte ändern:

  • C - berechnete Spalte
  • D - Standard
  • F - SQLJ-Funktion
  • L-Log
  • N - Partitionszustand
  • P - Transact-SQL- oder SQLJ-Prozedur
  • PR - Objekte vorbereiten (erstellt mit Dynamic SQL)
  • R - Regel
  • RI - referentielle Einschränkung
  • S - Systemtabelle
  • TR - Auslöser
  • 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'
56
Lukasz Lysik

sp_help ist was Sie suchen. 

Aus der Sybase-Online-Dokumentation zur Systemprozedur sp_help

Beschreibung

Meldet Informationen zu einem Datenbankobjekt (alle in sysobjects aufgelisteten Objekte) und zu System- oder benutzerdefinierten Datentypen sowie berechneten Spalten und funktionsbasierten Indizes. Spalte zeigt optimistic_index_lock an.

Syntax

sp_help [objname]

[...]

Hier ist die (teilweise) Ausgabe für die Herausgeber-Tabelle (eingefügt aus Using sp_help für 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

Immer noch zitieren sp_help für Datenbankobjekte verwenden :

Wenn Sie sp_help ausführen, ohne einen Objektnamen anzugeben, zeigt der resultierende Bericht jedes Objekt in sysobjects sowie dessen Namen, Eigentümer und Objekttyp an. Außerdem werden alle benutzerdefinierten Datentypen in Systypen und deren Name, Speichertyp, Länge, zulässige Nullwerte und alle daran gebundenen Standardwerte oder Regeln angezeigt. Der Bericht stellt auch fest, ob für eine Tabelle oder Sicht Primär- oder Fremdschlüsselspalten definiert wurden. 

42
Pascal Thivent

Sybase IQ:

describe table_name;
6
Sergey Zinyuk
     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'
3
Kishore

Sie können in allen Tabellen in der Datenbank nach Spalten suchen:

SELECT so.name 
FROM sysobjects so
INNER JOIN syscolumns sc ON so.id = sc.id 
WHERE sc.name = 'YOUR_COLUMN_NAME'
2
MDn

Wenn Sie eine Benutzertabelle suchen, können Sie Folgendes verwenden, wenn Sie auch den Namen des Tabellenbesitzers haben möchten:

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
1
shanmugs

sp_tables funktioniert auch in isql. Sie erhalten die Liste der Tabellen in der aktuellen Datenbank.

1
Chris Morgan

Für Sybase ASE gibt sp_columns table_name alle Tabellenmetadaten zurück, nach denen Sie suchen.

0
hui chen

In der von mir verwendeten Sybase-Version enthält das Folgende eine Liste von Spalten für die 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
0
Orhan Celik

Hier ein anderer Ansatz, um Metadaten abzurufen. Dieser sehr hilfreiche SQL-Befehl gibt die Tabellen-/Sichtdefinition als Text zurück:

SELECT text FROM syscomments WHERE id = OBJECT_ID ('MySchema.MyTable') ORDER BY-Nummer, colid2, colid

Viel Spaß Patrick

0
Patrick Wolf

Wenn Sie ein Befehlszeilenprogramm verwenden möchten, jedoch nicht auf SQL beschränkt sind, können Sie SchemaCrawler verwenden. SchemaCrawler ist Open Source und kann Dateien im Nur-Text-, CSV- oder (X) HTML-Format erzeugen.

0
Sualeh Fatehi