Lista tipo dos campos - consulta das chaves primarias de uma tabela?

SQL Server

24/07/2013

Boa tarde a todos

Seria possível a consulta das chaves primarias de uma tabela?
Tenho o comando a baixo que me lista todos os campos de uma tabela do meu banco de dados, a dúvida é como saber qual campo e chave primaria e caso tenha FK mostra tambêm. Alguém sabe como listas estas informações?
Agradeço

SELECT COLUMN_NAME ,IS_NULLABLE , DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TBARQUIVO'
Itamar Souza

Itamar Souza

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

24/07/2013

Opa.
Talvez este link te ajude: [url]http://blog.sqlauthority.com/2009/07/17/sql-server-two-methods-to-retrieve-list-of-primary-keys-and-foreign-keys-of-database/[/url]
GOSTEI 0
Mariana Carvalho

Mariana Carvalho

24/07/2013

esses comando são mais para a parte admin do banco não é?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

24/07/2013

esses comando são mais para a parte admin do banco não é?

É muito relativo, depende muito da necessidade. Quem precisar, usa, até mesmo o programador do sistema que acessa o banco.
GOSTEI 0
Itamar Souza

Itamar Souza

24/07/2013

Valeu amigos!!

Conseguir fazer o que precisava! fica ai a dica para todos.

--listas todas as FK e a chave primária
SELECT CONSTRAINT_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'TBARQUIVO'

--descobre em qual tabela do banco a FK ou chave primária esta
SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_CATALOG = 'NomeBanco' and COLUMN_NAME = 'ID_ARQUIVO'
and ORDINAL_POSITION = 1

Muito Agradecido!
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

24/07/2013

Show de bola, Itamar. Que bom que conseguiu.
Neste caso, estou marcando o tópico como Concluído para que outros usuários possam consultá-lo como referência posteriormente.
GOSTEI 0
Daniel Costa

Daniel Costa

24/07/2013

Só pra acrescentar, essa puxa a definição da tabela, as chaves tem a coluna isKey = 1

select
s.name as schema_name, o.name as table_name, c.name, type_name(c.system_type_id) as tipo,
c.max_length, c.precision, isnull(i.is_primary_key, 0) as iskey, c.is_nullable,
c.is_computed as autoincrementa ,c.scale
from
sys.objects o
inner join sys.columns c on o.object_id = c.object_id
inner join sys.schemas s on o.schema_id = s.schema_id
left join sys.index_columns ic on ic.column_id = c.column_id and ic.object_id = c.object_id
left join sys.indexes i on i.index_id = ic.index_id and ic.object_id = i.object_id
where
o.type_desc = 'user_table' and o.name = @tabela and s.name = @esquema
GOSTEI 0
POSTAR