locked
Recuperar o Oid da tupla RRS feed

  • Pergunta

  • Bom dia!

    Em Postgres, tenho o object id (oid - coluna de sistema) de um tupla, que é unico para cada registro inserido no banco de dados.

    No SQL Server tenho essa coluna? Como consulta as colunas "invisiveis"?

    Obrigado


    Anderson

    segunda-feira, 29 de julho de 2019 10:35

Todas as Respostas

  • Não, no SQL Server cada coluna possui um ID column_id relacionado à tabela específica (object_id).

    Na tabela do Sistema sys.syscolpars você encontra um ID único para cada coluna na base de dados, mas é de controle interno do SQL Server.

    Espero ter entendido a pergunta.

    segunda-feira, 29 de julho de 2019 11:04
  • Deleted
    segunda-feira, 29 de julho de 2019 11:39
  • Anderson,

    Deixa eu ve se entendi, você esta se referindo a coluna autonumerada ou coluna que não permite valores repetidos?

    Se coluna autonumerada o José Diz já te apresentou algumas possibilidades, caso você se refira a uma coluna que não permite valores repetidos (valores exclusivos ou únicos), estaremos neste caso falando de chaves primárias ou constraint Unique (conceito relacionado a propriedades Unicidade de um dado).

    Vou apresentar abaixo os exemplos de ambas as possibilidades:

    -- Criando uma coluna chave primária - Primary Key --
    Create Table Produtos
     (CodigoProduto Int Primary Key,
      NomeProduto Varchar(100) Not Null)
    Go
    
    -- Criando uma chave primária autonumerada -- Primary Key Identity --
    Create Table Produtos
     (CodigoProduto Int Identity(1,1) Primary Key,
      NomeProduto Varchar(100) Not Null)
    Go
    
    -- Criando uma coluna Unique --
    Create Table Alunos
     (RAAluno Int Primary Key,
      NomeAlun Varchar(100) Not Null,
      RGAluno Int Not Null Unique)
    Go
    
    

    Destaco que estes são somente exemplos de código, em nenhum momento levei em consideração a sua necessidade, regras de negócio ou ambiente, analise, valide e teste caso achar útil.

    Caso queira saber mais sobre como implementar regras de exclusividades de dados, acesse: https://docs.microsoft.com/pt-br/sql/relational-databases/tables/create-unique-constraints


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 29 de julho de 2019 12:06
  • Bom dia Junior,

    Na realidade o que preciso é algo relacionado a um identificador único por tupla[1], que não é uma sequence ou um coluna identity.

    Obrigado pelo retorno.

    [1] http://www.sqlines.com/postgresql/oid


    Anderson

    terça-feira, 30 de julho de 2019 10:00
  • Bom dia José,

    Na realidade o que preciso é algo relacionado a um identificador único por tupla[1], que não é uma sequence ou um coluna identity.

    Obrigado pelo retorno.

    [1] http://www.sqlines.com/postgresql/oid


    Anderson

    terça-feira, 30 de julho de 2019 10:00
  • Deleted
    terça-feira, 30 de julho de 2019 10:35
  • Anderson,

    Ok, quando de referimos a uma Tupla, esta fazendo alusão a um dos conceitos mais antigos a área de banco de dados, também conhecido como registro lógico, que representa uma linha de dados preenchida por completa em cada atributo que faz parte da sua composição.

    Acredito que neste caso como você mesmo destacou, a Identity ou Sequence não vai se encaixar, então poderiamos aplicar o uso de chaves primárias compostas formada por várias colunas, bem como, o uso da constraint Unique nas demais colunas que não podem se repetir.

    Por outro lado, podemos pensar também, na possibilidade da ocorrência de nenhum dado se repetir em todas as colunas, algo meio fora da realidade, mas como não conheço sua regra de negócio, faço o questionamento abaixo:

    Você deseja tornar cada linha única e exclusiva em sua tabela? Se for realmente isso, temos que analisar este cenário!


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 30 de julho de 2019 14:23
  • Deleted
    terça-feira, 30 de julho de 2019 16:07
  • Oi Junior, 

    Obrigado pelo retorno.

    Na realidade o que preciso é algo relacionado a um identificador único por tupla[1] e geral para todas as tabelas do banco de dados, não é a sequence ou identity, precisaria da mesma forma como é implementado no Postgres, ou seja, uma coluna "invisível" na tabela, que é preenchida automaticamente pelo sistema, no momento de um comando DML Insert.

    Pesquisei nos docs do sql server e não encontrei, acredito que não seja implementado da mesma forma ou é uma diretiva da Microsoft não mostrar esse tipo de informação.

    Obrigado pelo retorno.

    [1] http://www.sqlines.com/postgresql/oid


    Anderson

    quarta-feira, 31 de julho de 2019 13:13
  • Anderson,

    Sim, obrigado pelo retorno, estou acompanhando o post!

    A sugestão de utilizar o sequence, identity e unique não satisfazem a sua necessidade como já fizemos, anteriormente foi sugerido o uso do data type UniqueIdentifier em conjunto com as funções de sistema NewID() e NewSequentialID(). Este recurso não ajudou?

    Da forma que você esta descrevendo a sua necessidade podemos imaginar justamente que o Identity se encaixa, pois trata-se de um recurso de criar de forma automática e autonumerada esta "coluna invisível ou oculta" como você se refere, que na verdade na área de banco de dados faz alusão a um conceito chamado de chave primária artificial ou surrogate key.

    Caso o UniqueIdentifier não te atenda, teremos que pensar em criar uma solução específica, elaborar um algoritmo, em um cliente que atuei fazem alguns meses, tivemos a necessidade de criar estrutura para identificar de forma única e exclusiva cada registro ("produto"), de acordo com as fases de beneficiamente do mesmo dentro da linha de produção, combinando uma numeração específica criada via regra de negócio dentro da empresa combinando com siglas formadas por três.

    Talvez esse possa ser um caminho que tenhamos que pensar no seu cenário.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 31 de julho de 2019 13:25
  • Deleted
    quarta-feira, 31 de julho de 2019 13:37
  • [1] http://www.sqlines.com/postgresql/oid


    Anderson

    Acessando o link que você publicou, o recurso existente nativamente no SQL Server que se assemelha com o que você deseja é o Sequence, sendo este já indicado, demonstrado e abordado como uma possível resposta para o seu post.

    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 31 de julho de 2019 13:47
  • Obrigado pela ajuda pessoal.

    Entendi que não é prevista a implementação "NATIVA" na tabela, quando as estruturas forem criadas, precisa estar previsto a implementação do campo identificador.

    Obrigado aos colegas.

    Parabéns pelas respostas


    Anderson

    quinta-feira, 1 de agosto de 2019 15:56