none
Concatenação de campos. RRS feed

  • 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
    quinta-feira, 21 de junho de 2012 21:16

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
    sexta-feira, 22 de junho de 2012 17:09

Todas as Respostas

  • Evertoum,

    é apenas a variável @ptitulo que você declara e não inicializa(não atribui valor algum).


    Antero Marques

    quinta-feira, 21 de junho de 2012 22:08
  • Sim, eu atribuo, é que esqueci de especificar no exemplo. Essa variável vem como um parâmetro do tipo varchar (max) da stored procedure, onde é fornecido o titulo do campo.

    Editei acima.

    sexta-feira, 22 de junho de 2012 12:24
  • Agora, com essa modificação, só ficou faltando: ''' +

    Antes da variável @pCriadopor


    Antero Marques

    sexta-feira, 22 de junho de 2012 12: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
    sexta-feira, 22 de junho de 2012 17:09