Usuário com melhor resposta
Concatenação de campos.

Pergunta
-
Ola a todos, atribuo um select em forma de string à uma determinada variável, e posteriormente realizo um execute (@variavel) afim de exibir o resultado da consulta, funciona corretamente. Entretanto, quando adiciono algumas variáveis dentro deste select e realizo a concatenação destes, não é exibido a partir do execute o resultado como o esperado e também não me é retornado erro algum
Segue o código:
Funciona:
declare @pSql varchar(MAX), @comando varchar(MAX) SET @Comando = 'SELECT DISTINCT [i].iditem_setape, [e].empresa , [fil].filial , [e].razao AS Erazao , [fil].razao AS Frazao , [cta].conta , [p].projeto , [l].LOCAL , [ce].centro , [s].secao , [d].divisao , [fa].familia , [for].fornecedor, [t].tipo , [i].item , [i].agregado , [i].chapa , [i].descricao , [i].qtde , [i].unid , [i].notafiscal , [i].movmesatu , 0 , 0 , 0 , 0 , 0 , 0 , [i].dtcontabil , [i].dtaquis , [iv].dtinidepr , [fil].ult_cordep FROM dbo.tbitens AS i INNER JOIN [dbo].[tbitens_valores] [iv] ON [iv].[IdItem_setape] = [i].[IdItem_setape] INNER JOIN [dbo].[tbempresa] [e] ON [i].[IdEmpresa_setape] = [e].[IdEmpresa_setape] INNER JOIN [dbo].[tbfilial] [fil] ON [i].[IdFilial_setape] = [fil].[IdFilial_setape] LEFT JOIN dbo.tbconta AS cta ON cta.idconta_setape = i.idconta_setape LEFT JOIN dbo.tbcentro AS ce ON ce.idcentro_setape = i.idcentro_setape LEFT JOIN dbo.tbfamilia AS fa ON fa.idfamilia_setape = i.idfamilia_setape LEFT JOIN dbo.tblocal AS l ON l.idlocal_setape = i.idlocal_setape LEFT JOIN dbo.tbprojeto AS p ON p.idprojeto_setape = i.idprojeto_setape LEFT JOIN dbo.tbfornecedor AS [for] ON [for].idfornecedor_setape = i.idfornecedor_setape INNER JOIN dbo.tbprodutos AS prod ON prod.idproduto_setape = i.idproduto_setape LEFT JOIN dbo.tbsecao AS s ON i.idsecao_setape = s.idsecao_setape LEFT JOIN dbo.tbdivisao AS d ON i.iddivisao_setape = d.iddivisao_setape LEFT JOIN dbo.tbclasse [cl] ON [i].[IdClasse_setape] = [cl].[IdClasse_setape] INNER JOIN [dbo].[tbIdent_sistema] [is] ON [is].[Ident_sistema] = [i].[ident_sistema] INNER JOIN [dbo].[tbtipo] [t] ON [t].[idtipo_setape] = [cta].[Idtipo_setape]' EXEC (@comando)
Não funciona:
DECLARE @ptarefa int declare @Psql varchar(MAX), @comando varchar(MAX), @ptitulo varchar(MAX), @Dtcriadoem datetime, @PCRIADOPOR VARCHAR(MAX),
@pTitulo varchar(max) SET @Dtcriadoem = GETDATE() SET @PCRIADOPOR = 'x' set @ptarefa = 483 set @Psql = ' i.idEmpresa_setape in ( ''cfac509a-8ae5-472c-bb48-ad0e5d751c7a'', ''85e99682-b71a-4277-a802-f0bd8c93541b'' )' set @ptitulo = 'abc' SET @Comando = 'SELECT DISTINCT ' + CONVERT(varchar(MAX),@pTarefa) + ',''' + @pTitulo + ''', [i].iditem_setape, [e].empresa , [fil].filial , [e].razao AS Erazao , [fil].razao AS Frazao , [cta].conta , [p].projeto , [l].LOCAL , [ce].centro , [s].secao , [d].divisao , [fa].familia , [for].fornecedor, [t].tipo , [i].item , [i].agregado , [i].chapa , [i].descricao , [i].qtde , [i].unid , [i].notafiscal , [i].movmesatu , 0 , 0 , 0 , 0 , 0 , 0 , [i].dtcontabil , [i].dtaquis , [iv].dtinidepr , [fil].ult_cordep , ' + @pCriadopor + ''', @Dtcriadoem FROM dbo.tbitens AS i INNER JOIN [dbo].[tbitens_valores] [iv] ON [iv].[IdItem_setape] = [i].[IdItem_setape] INNER JOIN [dbo].[tbempresa] [e] ON [i].[IdEmpresa_setape] = [e].[IdEmpresa_setape] INNER JOIN [dbo].[tbfilial] [fil] ON [i].[IdFilial_setape] = [fil].[IdFilial_setape] LEFT JOIN dbo.tbconta AS cta ON cta.idconta_setape = i.idconta_setape LEFT JOIN dbo.tbcentro AS ce ON ce.idcentro_setape = i.idcentro_setape LEFT JOIN dbo.tbfamilia AS fa ON fa.idfamilia_setape = i.idfamilia_setape LEFT JOIN dbo.tblocal AS l ON l.idlocal_setape = i.idlocal_setape LEFT JOIN dbo.tbprojeto AS p ON p.idprojeto_setape = i.idprojeto_setape LEFT JOIN dbo.tbfornecedor AS [for] ON [for].idfornecedor_setape = i.idfornecedor_setape INNER JOIN dbo.tbprodutos AS prod ON prod.idproduto_setape = i.idproduto_setape LEFT JOIN dbo.tbsecao AS s ON i.idsecao_setape = s.idsecao_setape LEFT JOIN dbo.tbdivisao AS d ON i.iddivisao_setape = d.iddivisao_setape LEFT JOIN dbo.tbclasse [cl] ON [i].[IdClasse_setape] = [cl].[IdClasse_setape] INNER JOIN [dbo].[tbIdent_sistema] [is] ON [is].[Ident_sistema] = [i].[ident_sistema] INNER JOIN [dbo].[tbtipo] [t] ON [t].[idtipo_setape] = [cta].[Idtipo_setape] WHERE '+ @pSql
EXEC (@comando)
Obrigado pelo auxílio.
- Editado Evertoum sexta-feira, 22 de junho de 2012 12:30
Respostas
-
Resolvido, obrigado.
SET @Comando = 'SELECT DISTINCT ' + CONVERT(varchar(MAX),@pTarefa) + ' as Tarefa,''' + @pTitulo + ''' as Titulo, [i].iditem_setape, [e].empresa , [fil].filial , [e].razao AS Erazao , [fil].razao AS Frazao , [cta].conta , [p].projeto , [l].LOCAL , [ce].centro , [s].secao , [d].divisao , [fa].familia , [for].fornecedor, [t].tipo , [i].item , [i].agregado , [i].chapa , [i].descricao , [i].qtde , [i].unid , [i].notafiscal , [i].movmesatu , 0 , 0 , 0 , 0 , 0 , 0 , [i].dtcontabil , [i].dtaquis , [iv].dtinidepr , [fil].ult_cordep ,''' + @PCRIADOPOR + ''' as Criadopor, [cta].[descricao] FROM dbo.tbitens AS i INNER JOIN [dbo].[tbitens_valores] [iv] ON [iv].[IdItem_setape] = [i].[IdItem_setape] INNER JOIN [dbo].[tbempresa] [e] ON [i].[IdEmpresa_setape] = [e].[IdEmpresa_setape] INNER JOIN [dbo].[tbfilial] [fil] ON [i].[IdFilial_setape] = [fil].[IdFilial_setape] LEFT JOIN dbo.tbconta AS cta ON cta.idconta_setape = i.idconta_setape LEFT JOIN dbo.tbcentro AS ce ON ce.idcentro_setape = i.idcentro_setape LEFT JOIN dbo.tbfamilia AS fa ON fa.idfamilia_setape = i.idfamilia_setape LEFT JOIN dbo.tblocal AS l ON l.idlocal_setape = i.idlocal_setape LEFT JOIN dbo.tbprojeto AS p ON p.idprojeto_setape = i.idprojeto_setape LEFT JOIN dbo.tbfornecedor AS [for] ON [for].idfornecedor_setape = i.idfornecedor_setape INNER JOIN dbo.tbprodutos AS prod ON prod.idproduto_setape = i.idproduto_setape LEFT JOIN dbo.tbsecao AS s ON i.idsecao_setape = s.idsecao_setape LEFT JOIN dbo.tbdivisao AS d ON i.iddivisao_setape = d.iddivisao_setape LEFT JOIN dbo.tbclasse [cl] ON [i].[IdClasse_setape] = [cl].[IdClasse_setape] INNER JOIN [dbo].[tbIdent_sistema] [is] ON [is].[Ident_sistema] = [i].[ident_sistema] INNER JOIN [dbo].[tbtipo] [t] ON [t].[idtipo_setape] = [cta].[Idtipo_setape] WHERE '+ @pSql
- Marcado como Resposta Evertoum sexta-feira, 22 de junho de 2012 17:39
Todas as Respostas
-
-
-
Agora, com essa modificação, só ficou faltando: ''' +
Antes da variável @pCriadopor
Antero Marques
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 22 de junho de 2012 15:48
-
Resolvido, obrigado.
SET @Comando = 'SELECT DISTINCT ' + CONVERT(varchar(MAX),@pTarefa) + ' as Tarefa,''' + @pTitulo + ''' as Titulo, [i].iditem_setape, [e].empresa , [fil].filial , [e].razao AS Erazao , [fil].razao AS Frazao , [cta].conta , [p].projeto , [l].LOCAL , [ce].centro , [s].secao , [d].divisao , [fa].familia , [for].fornecedor, [t].tipo , [i].item , [i].agregado , [i].chapa , [i].descricao , [i].qtde , [i].unid , [i].notafiscal , [i].movmesatu , 0 , 0 , 0 , 0 , 0 , 0 , [i].dtcontabil , [i].dtaquis , [iv].dtinidepr , [fil].ult_cordep ,''' + @PCRIADOPOR + ''' as Criadopor, [cta].[descricao] FROM dbo.tbitens AS i INNER JOIN [dbo].[tbitens_valores] [iv] ON [iv].[IdItem_setape] = [i].[IdItem_setape] INNER JOIN [dbo].[tbempresa] [e] ON [i].[IdEmpresa_setape] = [e].[IdEmpresa_setape] INNER JOIN [dbo].[tbfilial] [fil] ON [i].[IdFilial_setape] = [fil].[IdFilial_setape] LEFT JOIN dbo.tbconta AS cta ON cta.idconta_setape = i.idconta_setape LEFT JOIN dbo.tbcentro AS ce ON ce.idcentro_setape = i.idcentro_setape LEFT JOIN dbo.tbfamilia AS fa ON fa.idfamilia_setape = i.idfamilia_setape LEFT JOIN dbo.tblocal AS l ON l.idlocal_setape = i.idlocal_setape LEFT JOIN dbo.tbprojeto AS p ON p.idprojeto_setape = i.idprojeto_setape LEFT JOIN dbo.tbfornecedor AS [for] ON [for].idfornecedor_setape = i.idfornecedor_setape INNER JOIN dbo.tbprodutos AS prod ON prod.idproduto_setape = i.idproduto_setape LEFT JOIN dbo.tbsecao AS s ON i.idsecao_setape = s.idsecao_setape LEFT JOIN dbo.tbdivisao AS d ON i.iddivisao_setape = d.iddivisao_setape LEFT JOIN dbo.tbclasse [cl] ON [i].[IdClasse_setape] = [cl].[IdClasse_setape] INNER JOIN [dbo].[tbIdent_sistema] [is] ON [is].[Ident_sistema] = [i].[ident_sistema] INNER JOIN [dbo].[tbtipo] [t] ON [t].[idtipo_setape] = [cta].[Idtipo_setape] WHERE '+ @pSql
- Marcado como Resposta Evertoum sexta-feira, 22 de junho de 2012 17:39