none
Pegar coluna pelo indice RRS feed

  • Pergunta

  • Senhres, bom dia!

     

    tenho uma determinada tabela com tres colunas.

     

    Gostaria de pegar os valores pelo ordinal_position, que seria o indice da coluna na tabela,

     

    tabela:

    aluno

    campos:

    nome

    idade

    matricula

     

    Fazendo um paralelo com vetores, seria algo do tipo:

     

    select column[3] from tabela

     

    O que retornaria os dados da minha ultima coluna. O column[3] representaria o nome da minha coluna matricula.

     

    Espero ter sido claro.

     

     

    Obrigado,

    Anderson

    quarta-feira, 19 de novembro de 2008 13:21

Todas as Respostas

  • Olá Anderson,

     

    Normalmente esse tipo de procedimento interfere de certa forma na independência lógica dos dados, uma vez que você terá que confiar que as colunas estão sempre na ordem esperada. Caso alguém insira uma coluna que venha a alterar a ordem das colunas suas aplicação irá parar de funcionar. Quando especificamos o nome estamos livres dessa limitação.

     

    As linguagens de programação permitem acesso tanto por nome quanto por posição quando os dados são recuperados. Isso iria atender a necessidade da mesma forma, só que através da aplicação. Há alguma necessidade específica que você espera atender através desse tipo de construção ? Estou vendo desvantagens, mas não consigo enxergar um ponto positivo.

     

    [ ]s,

     

    Gustavo

    quarta-feira, 19 de novembro de 2008 13:28
  • Olá Gustavo.

     

    Penso como você sobre vantagens e desvantagens sobre a integridade da estrutura.

     

    O negócio é que determinado cliente tem TODAS as regras de negócio em banco.

     

    E minha tabela especifica, é uma matriz multidimensional, que devo fazer o somatório de todos os valores e apresentá-los pelas colunas.

     

    Existe uma idéia de fazer um CURSOR para buscar as informacões. Entetanto, se houvesse uma forma mais simples, no caso buscar o dado pelo índice da coluna, seria ainda mais fácil que o CURSOR.

     

    Será que tenho como buscar os dados pelo índice?

     

     

     

    Anderson

     

    quarta-feira, 19 de novembro de 2008 13:36
  • Olá Anderson,

     

    Não acho que valha a pena que você tente me explicar porque as coisas foram feitas dessa forma, mas a SQL não dá esse tipo de suporte (independente do banco nunca vi nada parecido). Há duas possíveis saídas a serem consideradas:

     

    Renomear todas as colunas

    Se a idéia é trabalhar com colunas com base em posição, renomeie todas as suas tabelas para utilizar o número da coluna. Ex: CREATE TABLE ([1] as INT, [2] AS VARCHAR(50)). Você não precisa "destruir" seu modelo de dados. Crie uma View para cada tabela "traduzindo" o nome das colunas para a posição. Ex: SELECT Campo As [1], Campo As [2] FROM tbl

     

    Fazer uma pesquisa na Information_Schema.Columns e montar um SELECT dinâmico

    Algo como o exemplo abaixo (trabalhoso quando envolver mais de uma coluna)

     

    Code Snippet

    DECLARE @Pos TINYINT, @tabela VARCHAR(50), @Schema VARCHAR(30), @cmdSQL VARCHAR(200)

    SET @Pos = 3

    SET @Tabela = 'Contact'

    SET @Schema = 'Person'

     

    SET @cmdSQL = 'SELECT ' +

    (SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS

    WHERE ORDINAL_POSITION = @Pos AND TABLE_NAME = @Tabela AND TABLE_SCHEMA = @Schema)

    + ' FROM ' + @Schema + '.' + @Tabela

    EXEC (@cmdSQL)

     

    [ ]s,

     

    Gustavo

    quarta-feira, 19 de novembro de 2008 14:09