A partir de um banco de dados Sybase, como posso obter descrição da tabela (nomes de campos e tipos)?

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

Pergunta

Eu tenho acesso a linha isql comando e eu gostaria de obter Meta-Data de todas as tabelas de um banco de dados, possivelmente em um arquivo formatado. Como posso conseguir isso?

Graças.

Foi útil?

Solução

Verifique sysobjects e syscolumns tabelas.

Aqui é um diagrama de tabelas do sistema Sybase.

Lista de todas as tabelas de usuário:

SELECT * FROM sysobjects WHERE type = 'U'

Você pode mudar 'U' a outros objetos:

  • C - coluna computada
  • D - padrão
  • F - Função SQLJ
  • L - log
  • N - condição partição
  • P - Transact-SQL ou procedimento SQLJ
  • PR - preparar objetos (criados pela Dynamic SQL)
  • R - regra
  • RI - referencial restrição
  • S - tabela do sistema
  • TR - gatilho
  • U - tabela de usuário
  • V - vista
  • XP - procedimento armazenado estendido

Lista de colunas em uma tabela:

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

Outras dicas

sp_help é o que você está procurando.

De Sybase documentação on-line sobre o sp_help procedimento do sistema:

Descrição

Relatórios informações sobre um objecto da base de dados (qualquer objecto listado no sysobjects) e índices de cerca de sistema ou tipos de dados definidos pelo utilizador, bem como colunas calculadas e função baseados em. Coluna exibe optimistic_index_lock .

Sintaxe

sp_help [objname]

[...]

Aqui está a saída (parcial) para a tabela de editores (colado de Usando sp_help na base de dados de objetos ):

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

Ainda citando usando sp_help na base de dados de objetos :

Se você executar sp_help sem fornecer um nome de objeto, o relatório resultante mostra cada objeto em sysobjects, juntamente com o seu nome, proprietário e tipo de objeto. Também é mostrado cada tipo de dados definidos pelo utilizador no systypes e o seu nome, o tipo de armazenamento, comprimento, se os valores nulos são permitidos, e quaisquer padrões ou regras ligado a ele. O relatório também observa se quaisquer colunas de chave primária ou estrangeiras foram definidos para uma tabela ou exibição.

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'

Você pode procurar por coluna em todas as tabelas no banco de dados usando:

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

sp_tables também irá trabalhar em isql. Dá-lhe a lista de tabelas no banco de dados atual.

Ao encontrar a tabela de usuário, no caso, se quer o nome do proprietário da tabela também, você pode usar o seguinte:

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 você quiser usar um programa de linha de comando, mas não está restrito a utilizar SQL, você pode usar SchemaCrawler . SchemaCrawler é open source, e pode produzir arquivos em texto simples, CSV, ou (X) HTML formatos.

Aqui uma abordagem diferente para obter dados de meta. Este comando SQL muito úteis retornos-lhe a vista / definição de tabela como texto:

texto SELECT FROM syscomments WHERE id = OBJECT_ID ( 'meu_esquema.minha_tabela') ORDER BY número, colid2, colid

Aproveite Patrick

No uso Sybase versão I, a seguinte lista de colunas dá para tabela selecionada

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

Para Sybase ASE, sp_columns table_name retornará todos os metadados da tabela que você está procurando.

Se Sybase é SQL-92 compatível, em seguida, essas informações são armazenadas nas tabelas INFORMATION_SCHEMA.

Assim, a seguir lhe dará uma lista de tabelas e exibições em qualquer banco de dados compatível SQL-92

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top