none
SQL SERVE - CAMPO DECLARADO NÃO ESTA TRAZENDO VALORES CONCATENADOS NO PRINT RRS feed

  • Pergunta

  • Senhores, 

    Vejam quem pode me ajudar. Tenho um pequeno select onde o print eu quero que venha sendo concatenado no while um campo de valor texto. Só que ao rodar ele sempre me traz em branco o print. 

    Veja abaixo:

       

    declare
    @contador as int,
    @qtde as int,
    @chave as int,
    @Resultado as  NVARCHAR (1000),
    @Montagem as  NVARCHAR (1000),
    @Tabela as varchar(30)

    set @contador = 0

    -- +++++++++++++++++++++++++++++
    -- aqui digita o nome da tabela
    set @Tabela = 'Matricula'
    -- +++++++++++++++++++++++++++++

    -- ----------------------------------------------- BUSCANDO CAMPOS EM SELECT - MONTANDO A FORMATACAO -----------------------------------------------
    -- SERVE PARA MONTAR AS FORMATAÇAO DOS VALORES QUE IRÃO RECEBER OS CONFORME SELECT A CIMA PARA ABRIR UMA FURNCAO QUALQUER DO CSHARP
    -- QUEM TEM POR OBJETIVO TRABALHAR COM O SELECT


    set @Chave = (select min(colunas.colid)  
    from SYSOBJECTS TABELAS  INNER JOIN SYSCOLUMNS COLUNAS ON (TABELAS.ID = COLUNAS.ID)  
    LEFT JOIN SYSFOREIGNKEYS FORE ON (FORE.fkeyid = COLUNAS.ID) AND (FORE.fkey = COLUNAS.colid)  
    LEFT JOIN sys.index_columns PK ON (PK.object_id = COLUNAS.id AND PK.column_id = COLUNAS.colid)  
    WHERE TABELAS.XTYPE = 'U' and TABELAS.name = @Tabela )

    set @qtde = (select count(colunas.colid)  
    from SYSOBJECTS TABELAS  INNER JOIN SYSCOLUMNS COLUNAS ON (TABELAS.ID = COLUNAS.ID)  
    LEFT JOIN SYSFOREIGNKEYS FORE ON (FORE.fkeyid = COLUNAS.ID) AND (FORE.fkey = COLUNAS.colid)  
    LEFT JOIN sys.index_columns PK ON (PK.object_id = COLUNAS.id AND PK.column_id = COLUNAS.colid)  
    WHERE TABELAS.XTYPE = 'U' and TABELAS.name = @Tabela )


    WHILE @contador < @qtde
    BEGIN

    set @Resultado = convert(varchar(60),(select colunas.name
    FROM SYSOBJECTS TABELAS  
    INNER JOIN SYSCOLUMNS COLUNAS ON (TABELAS.ID = COLUNAS.ID)  
    LEFT JOIN SYSFOREIGNKEYS FORE ON (FORE.fkeyid = COLUNAS.ID) AND (FORE.fkey = COLUNAS.colid)      
    LEFT JOIN sys.index_columns PK ON (PK.object_id = COLUNAS.id AND PK.column_id = COLUNAS.colid)    
    WHERE TABELAS.XTYPE = 'U' and TABELAS.name = @Tabela and colunas.colid = @chave ))

    set @Montagem = @Montagem + ',' + @Resultado

    ---print @Resultado
    print @Montagem 

    set @chave = (select min(colunas.colid)  from SYSOBJECTS TABELAS  INNER JOIN SYSCOLUMNS COLUNAS ON (TABELAS.ID = COLUNAS.ID)      
    LEFT JOIN SYSFOREIGNKEYS FORE ON (FORE.fkeyid = COLUNAS.ID) AND (FORE.fkey = COLUNAS.colid)      
    LEFT JOIN sys.index_columns PK ON (PK.object_id = COLUNAS.id AND PK.column_id = COLUNAS.colid)    
        WHERE TABELAS.XTYPE = 'U' and TABELAS.name = @Tabela and COLUNAS.colid > @chave)

    Set @contador = @contador + 1

    END

    Só para testar se eu atribui a variável @montagem recebendo o @resultado (set @Montagem = @Resultado) e ao rodar no print deu tudo certo, mas seu deixar como está no exemplo (set @Montagem = @Montagem + ',' + @Resultado) ele não traz nada. 

    O que pode ser feito para sair no print conforme abaixo? Exemplo:

    Campo1

    campo1,campo2

    campo1,campo2,campo3

    campo1,campo2,campo3,campo4 etc.......

    ou seja, cada vez que for fazer o loop ele irá montando e adicionando os outros valores.

    Alguém pode me ajudar?

    terça-feira, 3 de setembro de 2013 15:04

Respostas