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?