Da un database Sybase, come posso ottenere la descrizione della tabella (nomi e tipi di campi)?

StackOverflow https://stackoverflow.com/questions/1429898

Domanda

Ho accesso alla riga di comando isql e mi piace ottenere i metadati di tutte le tabelle di un determinato database, possibilmente in un file formattato. Come posso farlo?

Grazie.

È stato utile?

Soluzione

Controlla sysobjects e syscolumns tabelle.

Qui è un diagramma delle tabelle di sistema Sybase.

Elenco di tutte le tabelle utente:

SELECT * FROM sysobjects WHERE type = 'U'

Puoi cambiare 'U' in altri oggetti:

  • C - colonna calcolata
  • D - impostazione predefinita
  • F - Funzione SQLJ
  • L - log
  • N - condizione di partizione
  • P - Procedura Transact-SQL o SQLJ
  • PR: prepara gli oggetti (creati da Dynamic SQL)
  • R - regola
  • RI - vincolo referenziale
  • S - tabella di sistema
  • TR - trigger
  • U - tabella utente
  • V - view
  • XP - procedura memorizzata estesa

Elenco di colonne in una tabella:

SELECT sc.* 
FROM syscolumns sc
INNER JOIN sysobjects so ON sc.id = so.id
WHERE so.name = 'my_table_name'

Altri suggerimenti

sp_help è quello che stai cercando.

Dalla documentazione online di Sybase su sp_help procedura di sistema:

  

Descrizione

     

Riporta informazioni su un oggetto di database (qualsiasi oggetto elencato in sysobjects) e su tipi di dati di sistema o definiti dall'utente, nonché colonne calcolate e indici basati su funzioni. La colonna mostra optimistic_index_lock .

     

Sintassi

     

sp_help [objname]

     

[...]

Ecco l'output (parziale) per la tabella dei publisher (incollato da Uso di sp_help su oggetti di database ):

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

Sto ancora citando Utilizzo di sp_help su oggetti di database :

  

Se si esegue sp_help senza fornire il nome di un oggetto, il rapporto risultante mostra ogni oggetto in sysobjects, insieme al suo nome, proprietario e tipo di oggetto. Inoltre viene mostrato ogni tipo di dati definito dall'utente in systypes e il suo nome, tipo di archiviazione, lunghezza, se sono consentiti valori Null ed eventuali valori predefiniti o regole associati ad esso. Il report rileva inoltre se sono state definite colonne di chiave primaria o esterna per una tabella o una vista.

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'

Puoi cercare la colonna in tutte le tabelle nel database usando:

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

sp_tables funzionerà anche in isql. Ti dà l'elenco delle tabelle nel database corrente.

Quando si trova una tabella utente, nel caso in cui si desideri anche il nome del proprietario della tabella, è possibile utilizzare quanto segue:

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

Se si desidera utilizzare un programma da riga di comando, ma non si è limitati all'utilizzo di SQL, è possibile utilizzare SchemaCrawler . SchemaCrawler è open source e può produrre file in formato testo normale, CSV o (X) HTML.

Ecco un approccio diverso per ottenere i metadati. Questo utilissimo comando SQL restituisce la definizione tabella / vista come testo:

SELEZIONA testo DA syscomments DOVE id = OBJECT_ID ('MySchema.MyTable') ORDINA PER numero, colid2, colid

Godetevi Patrick

Nella versione di Sybase che uso, il seguente fornisce un elenco di colonne per la tabella selezionata

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

Per Sybase ASE, sp_columns table_name restituirà tutti i metadati della tabella che stai cercando.

Se Sybase è conforme a SQL-92, queste informazioni vengono archiviate nelle tabelle INFORMATION_SCHEMA.

Quindi il seguente ti fornirà un elenco di tabelle e viste in qualsiasi database conforme a SQL-92

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top