Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal,
Eu costumo ser mais ativo no forum de ASP, mas estou precisando da ajuda de voces.....
Seguinte....
Eu tenho uma tabela relacional (usuarios e listas), sendo que uma lista pode conter varios usuarios e um usuarios pode conter varias listas. Basicamente, permissao de acesso a uma determinada lista.
E uma consulta na minha pagina retorna exatamente isto, tendo por base a lista....
Entao eu tenho
--tb_listas
lista_id
lista_nome
--sis_users
user_id
user_nome
--tr_users_listas
tr_id
tr_user_id
tr_lista_id
Pegou a ideia né?
Ok.... Na página eu quero trazer:
Lista | usuarios
lista_nome1 | user_nome1, user_nome2, ...
lista_nome2 | user_nome3, user_nome2, ...
Bom, utilidade explicada, vamos a solucao....
Na consulta sql eu estou tentando consultar da TR inner join LISTAS, on lista_id = tr_lista_id
(tah abreviado, mas o negócio é passar a idéia).....
Pra isso.....
SELECT l.lista_nome, dbo.fnJoin(USUARIOS_DA_LISTA)
FROM tr_user_lista tr inner join tb_listas l
on tr.tr_lista_id = l.lista_id
Ok, para isso, eu quero Join, Concatenar, Juntar, Agrupar, ou como preferirem, em uma STRING (varchar) ........
Entao estou tentando criar uma funcao fnJoin generica, para que me sirva a outras utilidades!!!!!
Vai então....
CREATE FUNCTION dbo.fnJoin (
@COLUNA VARCHAR(MAX),
@TABELA VARCHAR(MAX),
@FILTRO VARCHAR(MAX),
@DELIMITER VARCHAR(20) = ', '
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @CONCATED varchar(MAX);
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = '';
SET @SQL = 'SET @R = '''';
SELECT @R = @R + ' + @COLUNA + ' + ''' + @DELIMITER + '''
FROM ' + @TABELA + '';
IF (@FILTRO <> '') SET @SQL = @SQL + '
WHERE ' + @FILTRO;
EXECUTE sp_executesql @SQL, N'@R VARCHAR(MAX) OUTPUT', @R=@CONCATED OUTPUT;
RETURN @CONCATED;
END
Parece simples né ??
Exceto .....................
Agora ao problema......
A p0rr@ do SQL me retorna....
Mensagem 557, Nível 16, Estado 2, Linha 1
Somente as funções e alguns procedimentos armazenados estendidos podem ser executados em uma função.
Obvio que esse nivel, estado e linha sao da execucao DENTRO do sp_executesql....
E AI, alguem pode me salvar ???
Ja pensei em transformar em procedure, mas ai nao vou poder usar direto em campos do select,
Alem do mais, funcoes nao inserem, nao criam tabelas temporarias, nao criam tabelas normais, enfim, tah f0d@...........
HELP MEEE !
Carregando comentários...