Jump to content
Fórum Script Brasil
  • 0

SELECT dinâmico


Vitor Eduardo da Silva

Question

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:

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

Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

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:

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

SET @variavel = 'GETDATE()'

SET @sql = 'SELECT ' + @variavel
EXEC (@sql)

Link to comment
Share on other sites

  • 0

espero ter ajudado

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

--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)

Edited by THIAGOTHAMIEL
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...