none
Descobrir tabelas sem chave primária RRS feed

  • Pergunta

  • Boa tarde pessoal,

    Tema algum jeito de descobrir todas as tabelas que não tem chave primária em um banco?

    Obrigado :)

    sexta-feira, 16 de março de 2012 18:08

Respostas

  • Sounobre, boa tarde!

    Há um jeito bem simples de realizar o que você deseja.

    Selecione o banco de dados que você deseja verificar e após isso utilize o seguinte script:

    USE [NomeBaseDeDados]
    go
    
    SELECT *
    FROM sys.tables
    WHERE OBJECTPROPERTY(OBJECT_ID,'TableHasPrimaryKey') = 0
    GO
    

    Abs 


    Luan.Moreno MTAC | MCP | MTA | MCTS | MCITP SQL Server Administrator / Developer 2008

    • Marcado como Resposta Sounobre terça-feira, 20 de março de 2012 11:13
    sexta-feira, 16 de março de 2012 18:14
  • Esta tudo bem,

    Se quer somente o nome das tabelas, faça assim

    SELECT name AS NomeTabela
    FROM sys.tables
    WHERE OBJECTPROPERTY(OBJECT_ID,'TableHasPrimaryKey') = 0


    Luan.Moreno MTAC | MCP | MTA | MCTS | MCITP SQL Server Administrator / Developer 2008

    • Sugerido como Resposta Mariana Del Nero sexta-feira, 16 de março de 2012 21:13
    • Marcado como Resposta Sounobre terça-feira, 20 de março de 2012 11:13
    sexta-feira, 16 de março de 2012 21:12
  • SouNobre, boa noite.

    A resposta do Luan te lista todas as tabelas que não possuem chave primária.

    Quanto a prova 70-432, eu tirei a certificação no ano passado. Era a primeira prova que eu fiz e confesso que o nervosismo me fez reprovar e feio.

    Estudei um pouco mais e fiz a prova novamente. Passei com tranquilidade.
    Estudei pelo livro TRAINING KIT 70-432 da Microsoft Press e pelo Books On Line.

    A dica que dou é: faça a prova em inglês, e vá tranquilo. Sem nervosismo e tendo estudado antes, você com certeza irá obter sucesso.

    Boa sorte!!

    []'s


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    • Marcado como Resposta Sounobre terça-feira, 20 de março de 2012 11:13
    sexta-feira, 16 de março de 2012 21:17
  • Sounobre, boa tarde!

    Sem problemas, o fórum é exatamente para tirar suas dúvidas. Deixe eu te explicar um pouco mais.

    O SQL Server possui DMV's, isso significa que ele possui algumas view e funções que nos ajuda a visualizar informações importantes como nome de tabelas, índices criados, metadados dentre diversas informações.

    Essa tabela sys.tables é uma tabela que possui toda as tabelas cadastradas dentro de um banco de dados, ou seja  para você que deseja criar índices em todas as tabelas, como você disse, você deve saber quais são as tabelas que não possui índice, assim se realizarmos a seguintes consulta você saberá todas as tabelas do banco de dados que você escolher que não possui índice primário (index cluster)

    Segue codígo

    USE [NomeDoSeuBancoDeDados]
    
    SELECT name AS NomeTabela
    FROM sys.tables
    WHERE OBJECTPROPERTY(OBJECT_ID,'TableHasPrimaryKey') = 0

    Obs: Substitua o [NomeDoSeuBancoDeDados] pelo banco de dados que você deseja ver todas as tabelas que não possui índice.

    Anbs


    Luan.Moreno MTAC | MCP | MTA | MCTS | MCITP SQL Server Administrator / Developer 2008

    • Marcado como Resposta Sounobre terça-feira, 20 de março de 2012 11:13
    sexta-feira, 16 de março de 2012 21:21

Todas as Respostas

  • Sounobre, boa tarde!

    Há um jeito bem simples de realizar o que você deseja.

    Selecione o banco de dados que você deseja verificar e após isso utilize o seguinte script:

    USE [NomeBaseDeDados]
    go
    
    SELECT *
    FROM sys.tables
    WHERE OBJECTPROPERTY(OBJECT_ID,'TableHasPrimaryKey') = 0
    GO
    

    Abs 


    Luan.Moreno MTAC | MCP | MTA | MCTS | MCITP SQL Server Administrator / Developer 2008

    • Marcado como Resposta Sounobre terça-feira, 20 de março de 2012 11:13
    sexta-feira, 16 de março de 2012 18:14
  • Me apareceu vários campos, e não as tabelas em si.... era isso mesmo pra aparecer ou fiz errado? :)

    Obrigado

    • Marcado como Resposta Sounobre terça-feira, 20 de março de 2012 11:13
    • Não Marcado como Resposta Sounobre terça-feira, 20 de março de 2012 11:13
    sexta-feira, 16 de março de 2012 20:31
  • Kra, não sei se eu me expliquei direito, ou se eu msm que não entendi direito a questão do livro... deixa eu explicar melhor... :)

    estou estudando pra prova 70-432 (tah dificil pacas....rs)

    estou estudando pelo livro kit de treinamento da microsoft (bookman), tem uma questão do livro assim:"Adicione chaves primárias em todas as tabelas em seu banco de dados que não tenha nenhuma"

    ai tipo, acho q tenho q descobrir as tabelas e depois colocar chaves primarias, e com esse script apareceu direto várias colunas...

    Estou perdido...rs

    podem me ajudar?

    Obrigado

    sexta-feira, 16 de março de 2012 21:05
  • Esta tudo bem,

    Se quer somente o nome das tabelas, faça assim

    SELECT name AS NomeTabela
    FROM sys.tables
    WHERE OBJECTPROPERTY(OBJECT_ID,'TableHasPrimaryKey') = 0


    Luan.Moreno MTAC | MCP | MTA | MCTS | MCITP SQL Server Administrator / Developer 2008

    • Sugerido como Resposta Mariana Del Nero sexta-feira, 16 de março de 2012 21:13
    • Marcado como Resposta Sounobre terça-feira, 20 de março de 2012 11:13
    sexta-feira, 16 de março de 2012 21:12
  • SouNobre, boa noite.

    A resposta do Luan te lista todas as tabelas que não possuem chave primária.

    Quanto a prova 70-432, eu tirei a certificação no ano passado. Era a primeira prova que eu fiz e confesso que o nervosismo me fez reprovar e feio.

    Estudei um pouco mais e fiz a prova novamente. Passei com tranquilidade.
    Estudei pelo livro TRAINING KIT 70-432 da Microsoft Press e pelo Books On Line.

    A dica que dou é: faça a prova em inglês, e vá tranquilo. Sem nervosismo e tendo estudado antes, você com certeza irá obter sucesso.

    Boa sorte!!

    []'s


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    • Marcado como Resposta Sounobre terça-feira, 20 de março de 2012 11:13
    sexta-feira, 16 de março de 2012 21:17
  • Sounobre, boa tarde!

    Sem problemas, o fórum é exatamente para tirar suas dúvidas. Deixe eu te explicar um pouco mais.

    O SQL Server possui DMV's, isso significa que ele possui algumas view e funções que nos ajuda a visualizar informações importantes como nome de tabelas, índices criados, metadados dentre diversas informações.

    Essa tabela sys.tables é uma tabela que possui toda as tabelas cadastradas dentro de um banco de dados, ou seja  para você que deseja criar índices em todas as tabelas, como você disse, você deve saber quais são as tabelas que não possui índice, assim se realizarmos a seguintes consulta você saberá todas as tabelas do banco de dados que você escolher que não possui índice primário (index cluster)

    Segue codígo

    USE [NomeDoSeuBancoDeDados]
    
    SELECT name AS NomeTabela
    FROM sys.tables
    WHERE OBJECTPROPERTY(OBJECT_ID,'TableHasPrimaryKey') = 0

    Obs: Substitua o [NomeDoSeuBancoDeDados] pelo banco de dados que você deseja ver todas as tabelas que não possui índice.

    Anbs


    Luan.Moreno MTAC | MCP | MTA | MCTS | MCITP SQL Server Administrator / Developer 2008

    • Marcado como Resposta Sounobre terça-feira, 20 de março de 2012 11:13
    sexta-feira, 16 de março de 2012 21:21