A partir de um banco de dados Sybase, como posso obter descrição da tabela (nomes de campos e tipos)?
-
07-07-2019 - |
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.
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 ??li>
- 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