none
Select sys.columns + valores. RRS feed

  • Pergunta

  • Ola,

    Pessoal consigo fazer um procedure com o sys.columns  tabela, concatenando valores das colunas?

    Queria criar uma coisa mais dinâmica, é possível?

    Obrigado

    • Movido welington jr sexta-feira, 26 de maio de 2017 11:10 postado lugar errado
    terça-feira, 23 de maio de 2017 20:34

Respostas

  • Bom dia Rodrigo Schwinn,

    O exemplo do Kanaãm Luz Romero Rodrigues já realizar o inner join e faz o que você precisa, você tentou adequar o modelo dele?


    Att., Roberto Alves

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 31 de maio de 2017 13:13

Todas as Respostas

  • DECLARE @SQL VARCHAR(MAX)
    DECLARE @TABELA VARCHAR(10) = 'SUA_TABELA'
    
    ;WITH CTE AS (
    	SELECT cl.name FROM sys.objects tb INNER JOIN sys.columns cl ON
    	cl.object_id=tb.object_id
    	WHERE tb.type='U' AND tb.name = @TABELA
    ), CTE_GROUP AS (
    	SELECT Stuff((SELECT '],[' + name
    				  FROM   CTE 
    				  FOR xml path('')), 1, 1, '') + ']' cols
    	FROM   CTE a 
    )
    SELECT distinct @SQL = RIGHT(cols,LEN(cols)-1) FROM CTE_GROUP
    SET @SQL = 'SELECT ' + @SQL + ' FROM '+@TABELA 
    
    EXEC (@SQL)

    Acho que é isso que você está precisando.

    Abraço!


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    • Sugerido como Resposta Roberto AB Filho quarta-feira, 31 de maio de 2017 13:13
    terça-feira, 23 de maio de 2017 20:58
  • Olá Rodrigo,

    Consegui resolver seu problema?

    quinta-feira, 25 de maio de 2017 17:30
  • Então eu queria algo assism, com o nome da pagina filtro a tabela e pego sua colunas , já com seus dados.

    Não sei se uma boa pratica fazer isso.

    CREATE PROCEDURE uspTabela
    (
    	@Table varchar(255),
    	@idEmpreendimento varchar(255)
    )
    AS 
    BEGIN
    
    DECLARE @SchemaName sysname
    DECLARE @TableName sysname
    DECLARE @Colname sysname
    DECLARE @SQL_Template nvarchar(max)
    DECLARE @SQL nvarchar(max)
    
    SET @SchemaName = 'dbo' 
    SET @TableName = @Table
    
    CREATE TABLE ##Results(Colname sysname, colvalue varchar(256))
    
    SET @SQL_Template  = 'INSERT INTO ##Results(Colname,colvalue ) SELECT top 1 ''@Colname '' as Colname,'
                       + ' CONVERT(nvarchar(256),@Colname) AS ColValue'
                       + ' FROM ['+@SchemaName+'].['+@TableName+']' + 'WHERE [idEmpreendimento] =' + @idEmpreendimento
    
    
    DECLARE COL_CURSOR CURSOR STATIC FOR
    SELECT c.name
    FROM  sys.schemas s
     JOIN sys.tables t ON t.schema_id = s.schema_id
     JOIN  sys.columns c ON c.object_id = t.object_id
    WHERE s.name = @SchemaName AND t.name = @TableName
    OPEN COL_CURSOR 
    FETCH NEXT FROM COL_CURSOR INTO @Colname
    WHILE @@FETCH_STATUS =0
    BEGIN
        SET @SQL = REPLACE(@SQL_Template,'@ColName',@ColName)
        PRINT @SQL
        EXEC sp_executesql  @SQL
    FETCH NEXT FROM COL_CURSOR INTO @Colname
    END
    CLOSE COL_CURSOR 
    DEALLOCATE COL_CURSOR 
    SELECT * FROM ##Results
    DROP TABLE ##Results
    END


    quinta-feira, 25 de maio de 2017 19:54
  • Bom dia Rodrigo Schwinn,

    O exemplo do Kanaãm Luz Romero Rodrigues já realizar o inner join e faz o que você precisa, você tentou adequar o modelo dele?


    Att., Roberto Alves

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 31 de maio de 2017 13:13