How to concatenate variables

Asked

Viewed 1,241 times

0

Dynamically, I am capturing the name of the columns where it appears in two tables to after this effect an Insert with table values_A in the tab_B.

Using the resource CURSOR, I get the columns through a loop and then concatenate the variable to mount the final SQL.

DECLARE @query NVARCHAR(MAX)
DECLARE @insert NVARCHAR(MAX)
DECLARE @name NVARCHAR(MAX)
DECLARE @groupby NVARCHAR(MAX)

SET @query = ''

DECLARE cursor1 CURSOR FOR
    SELECT name FROM syscolumns
    WHERE [id] = (SELECT [id] FROM sysobjects WHERE name = 'cidades_sumario')

    OPEN cursor1
    FETCH NEXT FROM cursor1 INTO @name

    WHILE @@FETCH_STATUS = 0
    BEGIN

        IF @name = 'cod_grupo' OR 
        @name = 'cod_estabel' OR 
        @name = 'cod_representante' OR 
        @name = 'uf' OR 
        @name = 'cidade' OR 
        @name = 'cod_cliente' OR 
        @name = 'cod_produto' OR 
        @name = 'ano'
        BEGIN
            SET @query = @query + ' cubo.' + @name 
            SET @groupby = @groupby + ' cubo.' + @name 
        END
        ELSE 
        BEGIN
            SET @query = @query + ' SUM(cubo.' + @name + ')' 
        END

        SET @query = @query + ', '

        FETCH NEXT FROM cursor1 INTO @name

    END

    PRINT @query;

    SET @insert = ' INSERT INTO cidades_sumario SELECT ' + substring(@query, 1, (len(@query) - 1)) + ' FROM cubo GROUP BY ' + @groupby

    PRINT @insert;

CLOSE cursor1;
DEALLOCATE cursor1;

The return of PRINT @QUERY is:

cubo.uf,  cubo.cidade,  cubo.cod_grupo,  cubo.cod_representante,  cubo.ano,  SUM(cubo.jan_valor),  SUM(cubo.jan_quant),  SUM(cubo.jan_icms),  SUM(cubo.jan_ipi),  SUM(cubo.jan_pis),  SUM(cubo.jan_cofins),  SUM(cubo.jan_valorbon),  SUM(cubo.jan_quantbon),  SUM(cubo.jan_icmsbon),  SUM(cubo.jan_ipibon),  SUM(cubo.jan_pisbon),  SUM(cubo.jan_cofinsbon),  SUM(cubo.jan_valordev),  SUM(cubo.jan_quantdev),  SUM(cubo.jan_icmsdev),  SUM(cubo.jan_ipidev),  SUM(cubo.jan_pisdev),  SUM(cubo.jan_cofinsdev),  SUM(cubo.fev_valor),  SUM(cubo.fev_quant),  SUM(cubo.fev_icms),  SUM(cubo.fev_ipi),  SUM(cubo.fev_pis),  SUM(cubo.fev_cofins),  SUM(cubo.fev_valorbon),  SUM(cubo.fev_quantbon),  SUM(cubo.fev_icmsbon),  SUM(cubo.fev_ipibon),  SUM(cubo.fev_pisbon),  SUM(cubo.fev_cofinsbon),  SUM(cubo.fev_valordev),  SUM(cubo.fev_quantdev),  SUM(cubo.fev_icmsdev),  SUM(cubo.fev_ipidev),  SUM(cubo.fev_pisdev),  SUM(cubo.fev_cofinsdev),  SUM(cubo.mar_valor),  SUM(cubo.mar_quant),  SUM(cubo.mar_icms),  SUM(cubo.mar_ipi),  SUM(cubo.mar_pis),  SUM(cubo.mar_cofins),  SUM(cubo.mar_valorbon),  SUM(cubo.mar_quantbon),  SUM(cubo.mar_icmsbon),  SUM(cubo.mar_ipibon),  SUM(cubo.mar_pisbon),  SUM(cubo.mar_cofinsbon),  SUM(cubo.mar_valordev),  SUM(cubo.mar_quantdev),  SUM(cubo.mar_icmsdev),  SUM(cubo.mar_ipidev),  SUM(cubo.mar_pisdev),  SUM(cubo.mar_cofinsdev),  SUM(cubo.abr_valor),  SUM(cubo.abr_quant),  SUM(cubo.abr_icms),  SUM(cubo.abr_ipi),  SUM(cubo.abr_pis),  SUM(cubo.abr_cofins),  SUM(cubo.abr_valorbon),  SUM(cubo.abr_quantbon),  SUM(cubo.abr_icmsbon),  SUM(cubo.abr_ipibon),  SUM(cubo.abr_pisbon),  SUM(cubo.abr_cofinsbon),  SUM(cubo.abr_valordev),  SUM(cubo.abr_quantdev),  SUM(cubo.abr_icmsdev),  SUM(cubo.abr_ipidev),  SUM(cubo.abr_pisdev),  SUM(cubo.abr_cofinsdev),  SUM(cubo.mai_valor),  SUM(cubo.mai_quant),  SUM(cubo.mai_icms),  SUM(cubo.mai_ipi),  SUM(cubo.mai_pis),  SUM(cubo.mai_cofins),  SUM(cubo.mai_valorbon),  SUM(cubo.mai_quantbon),  SUM(cubo.mai_icmsbon),  SUM(cubo.mai_ipibon),  SUM(cubo.mai_pisbon),  SUM(cubo.mai_cofinsbon),  SUM(cubo.mai_valordev),  SUM(cubo.mai_quantdev),  SUM(cubo.mai_icmsdev),  SUM(cubo.mai_ipidev),  SUM(cubo.mai_pisdev),  SUM(cubo.mai_cofinsdev),  SUM(cubo.jun_valor),  SUM(cubo.jun_quant),  SUM(cubo.jun_icms),  SUM(cubo.jun_ipi),  SUM(cubo.jun_pis),  SUM(cubo.jun_cofins),  SUM(cubo.jun_valorbon),  SUM(cubo.jun_quantbon),  SUM(cubo.jun_icmsbon),  SUM(cubo.jun_ipibon),  SUM(cubo.jun_pisbon),  SUM(cubo.jun_cofinsbon),  SUM(cubo.jun_valordev),  SUM(cubo.jun_quantdev),  SUM(cubo.jun_icmsdev),  SUM(cubo.jun_ipidev),  SUM(cubo.jun_pisdev),  SUM(cubo.jun_cofinsdev),  SUM(cubo.jul_valor),  SUM(cubo.jul_quant),  SUM(cubo.jul_icms),  SUM(cubo.jul_ipi),  SUM(cubo.jul_pis),  SUM(cubo.jul_cofins),  SUM(cubo.jul_valorbon),  SUM(cubo.jul_quantbon),  SUM(cubo.jul_icmsbon),  SUM(cubo.jul_ipibon),  SUM(cubo.jul_pisbon),  SUM(cubo.jul_cofinsbon),  SUM(cubo.jul_valordev),  SUM(cubo.jul_quantdev),  SUM(cubo.jul_icmsdev),  SUM(cubo.jul_ipidev),  SUM(cubo.jul_pisdev),  SUM(cubo.jul_cofinsdev),  SUM(cubo.ago_valor),  SUM(cubo.ago_quant),  SUM(cubo.ago_icms),  SUM(cubo.ago_ipi),  SUM(cubo.ago_pis),  SUM(cubo.ago_cofins),  SUM(cubo.ago_valorbon),  SUM(cubo.ago_quantbon),  SUM(cubo.ago_icmsbon),  SUM(cubo.ago_ipibon),  SUM(cubo.ago_pisbon),  SUM(cubo.ago_cofinsbon),  SUM(cubo.ago_valordev),  SUM(cubo.ago_quantdev),  SUM(cubo.ago_icmsdev),  SUM(cubo.ago_ipidev),  SUM(cubo.ago_pisdev),  SUM(cubo.ago_cofinsdev),  SUM(cubo.stm_valor),  SUM(cubo.stm_quant),  SUM(cubo.stm_icms),  SUM(cubo.stm_ipi),  SUM(cubo.stm_pis),  SUM(cubo.stm_cofins),  SUM(cubo.stm_valorbon),  SUM(cubo.stm_quantbon),  SUM(cubo.stm_icmsbon),  SUM(cubo.stm_ipibon),  SUM(cubo.stm_pisbon),  SUM(cubo.stm_cofinsbon),  SUM(cubo.stm_valordev),  SUM(cubo.stm_quantdev),  SUM(cubo.stm_icmsdev),  SUM(cubo.stm_ipidev),  SUM(cubo.stm_pisdev),  SUM(cubo.stm_cofinsdev),  SUM(cubo.out_valor),  SUM(cubo.out_quant),  SUM(cubo.out_icms),  SUM(cubo.out_ipi),  SUM(cubo.out_pis),  SUM(cubo.out_cofins),  SUM(cubo.out_v

But the return of PRINT @insert returns nothing

1 answer

2


You need to initialize the variable @groupby. If she is equal to NULL, concatenation will not work.

SET @groupby = ''

Browser other questions tagged

You are not signed in. Login or sign up in order to post.