Ajuda - Busca - Membros - Calendário
Versão Completa: SELECT dinâmico
Fórum Script Brasil > Banco de Dados > SQL Server
Vitor Eduardo da Silva
OLá bom dia.

Tem como usar a posição da coluna na tabela ao invés do nome dela no SELECT, preciso fazer isso porque estou gerando um sql dinâmico. Exemplo:

CODE
SELECT
    ORDINAL_POSITION,
    COLUMN_NAME,
    (SELECT aqui estará o id da coluna ao invés do nome dela  FROM tabela WHERE id = ORDINAL_POSITION) AS VALUE
    
FROM
    INFORMATION_SCHEMA.COLUMNS
    
WHERE INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = 'tabela'


Tá fácil de entender?

Preciso gerar um sql com o id da coluna, o nome dela e o valor que assume em cada linha.

No aguardo
fulvio
Bom dia Vitor,

Tem como você criar sqls dinâmicos... você pode criar variáveis para gerar os sqls a serem executados. Desta forma, conseguirá executar para cada linha.

Para cada valor dinâmico (como a tabela, coluna, Id, etc) pode-se criar uma variável e ir acrescentado no script para execução.

Segue um exemplo e espero q ajude:

CODE
declare @sql VARCHAR(100)
declare @variavel VARCHAR(100)

SET @variavel = 'GETDATE()'

SET @sql = 'SELECT ' + @variavel
EXEC (@sql)
THIAGOTHAMIEL
espero ter ajudado

informe apenas o nome da tabela na variável @tabela

CODE
--09/02/2012 @THIAGOTHAMIEL / WWW.THIAGOTHAMIEL.COM
DECLARE @TABELA VARCHAR(200)
DECLARE @QTDCOLUNA INT
DECLARE @STRINGCOLUNA VARCHAR(8000)
DECLARE @COL VARCHAR(200)

SET @TABELA = 'INFORME O NOME DA TABELA' -- NOME DA TABELA
SET @QTDCOLUNA = (SELECT Max(ORDINAL_POSITION)
                  FROM   INFORMATION_SCHEMA.COLUMNS CL
                  WHERE  CL.TABLE_NAME = @TABELA)

DECLARE @INDEX INTEGER

SET @INDEX = 0

WHILE @INDEX < @QTDCOLUNA
  BEGIN
      SET @COL = (SELECT COLUMN_NAME
                  FROM   INFORMATION_SCHEMA.COLUMNS CL
                  WHERE  CL.TABLE_NAME = @TABELA
                         AND ORDINAL_POSITION = @INDEX)

      IF @STRINGCOLUNA IS NULL
        BEGIN
            SET @STRINGCOLUNA = @COL
        END
      ELSE
        BEGIN
            SET @STRINGCOLUNA = ( @STRINGCOLUNA + ',' + @COL )
        END

      SET @INDEX = @INDEX + 1
  END

EXEC ( 'SELECT ' + @STRINGCOLUNA + ' FROM ' + @TABELA)
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2012 Invision Power Services, Inc.