none
@r = exec(@sql) RRS feed

  • Pergunta

  •  

    Pessoal, como eu armazeno o resultado de um exec(@sql) numa variavel?

     

    Queria fazer isso pra depois com esse resultado eu poder fazer um update com o mesmo.

     

    Alguma alternativa p isso?


    DECLARE    @data_atual AS varchar(5), @sql_stmt NVARCHAR(300), @r as varchar(5)

     

    SET @data_atual = 'dia'+convert(varchar(5),day(getdate()))

    set @sql_stmt = 'select sum(' + @data_atual + ') from relatorio_rdbc_full' +
                     ' where status = ' + char(39) + 'PEN' + char(39) +
                     ' and servico = ' + char(39) + 'ADE' + char(39) +
                     ' and relatorio = ' + char(39) + 'BL' + char(39)

    SET @r = exec (@sql_stmt)    --> isso nao da p fazer....tem outra maneira?

     

     

    valeu!

     

    obs.: o q eu queria fazer era

     

    update relatorio_rdbc_full set @data_atual = @r

    where ....

    quarta-feira, 19 de novembro de 2008 17:30

Respostas

  • Olá Esquerdo,

     

    Infelizmente não é possível. Você terá que guardar o resultado em uma tabela temporária para depois capturar o resultado. Ex:

     

    Code Snippet

    CREATE TABLE #tbl (VALOR DECIMAL(10,2))

    INSERT INTO #tbl EXEC (@sql_stmt)

    DECLARE @Valor DECIMAL(10,2)

    SET @Valor = (SELECT VALOR FROM #tbl)

    DROP TABLE #tbl

     

     

    [ ]s,

     

    Gustavo

    quarta-feira, 19 de novembro de 2008 18:01
  • Olá Esquerdo,

     

    Realmente como o Gustavo já disse, não dá pra fazer do jeito que você pensou. Mas pelo que vi na tua query, porque você não resolve assim? Parece ser mais fácil!

    Code Snippet

    DECLARE @data_atual AS VARCHAR(5), @sql_stmt NVARCHAR(300)

    SET @data_atual = '#####'

     

    SET @sql_stmt = '

      UPDATE relatorio_rdbc_full

      SET ' + @data_atual + ' = (

        SELECT SUM(' + @data_atual + ')

        FROM relatorio_rdbc_full

        WHERE status = ''PEN''

        AND servico = ''ADE''

        AND relatorio = ''BL''

      )

    '

    PRINT @sql_stmt

    --// EXEC (@sql_stmt)

     

     

     

    Um abraço,

    Raul Santos Neto

    quarta-feira, 19 de novembro de 2008 19:09

Todas as Respostas

  • Olá Esquerdo,

     

    Infelizmente não é possível. Você terá que guardar o resultado em uma tabela temporária para depois capturar o resultado. Ex:

     

    Code Snippet

    CREATE TABLE #tbl (VALOR DECIMAL(10,2))

    INSERT INTO #tbl EXEC (@sql_stmt)

    DECLARE @Valor DECIMAL(10,2)

    SET @Valor = (SELECT VALOR FROM #tbl)

    DROP TABLE #tbl

     

     

    [ ]s,

     

    Gustavo

    quarta-feira, 19 de novembro de 2008 18:01
  • Olá Esquerdo,

     

    Realmente como o Gustavo já disse, não dá pra fazer do jeito que você pensou. Mas pelo que vi na tua query, porque você não resolve assim? Parece ser mais fácil!

    Code Snippet

    DECLARE @data_atual AS VARCHAR(5), @sql_stmt NVARCHAR(300)

    SET @data_atual = '#####'

     

    SET @sql_stmt = '

      UPDATE relatorio_rdbc_full

      SET ' + @data_atual + ' = (

        SELECT SUM(' + @data_atual + ')

        FROM relatorio_rdbc_full

        WHERE status = ''PEN''

        AND servico = ''ADE''

        AND relatorio = ''BL''

      )

    '

    PRINT @sql_stmt

    --// EXEC (@sql_stmt)

     

     

     

    Um abraço,

    Raul Santos Neto

    quarta-feira, 19 de novembro de 2008 19:09
  • Raul....exatamente o que eu queria...nao sabia se dava para colocar o select dentro do set do update....show de bola...

     

    Gustavo, valeu tambem pela solução. Tambem agregou conhecimento.

     

    Pessoal muito obrigado a todos voces deste forum. Me sinto em casa aqui. Parece q tenho varios amigos, pessoas com quem posso contar.

    Espero um dia poder ajudar outras pessoas assim como vcs fazem comigo!

     

    Sucesso p todos vcs e que Deus abencoe vcs!

     

     

    quarta-feira, 19 de novembro de 2008 19:21
  • Olá Gustavo,

     

    Dê uma olhada no exemplo abaixo. Cada dia aprendendo algo novo!

    Code Snippet

    DECLARE @sqlStatement NVARCHAR(100)

    DECLARE @sqlParameters NVARCHAR(100)

    DECLARE @sqlResult INT

     

    SET @sqlParameters = '@result INT OUTPUT'

    SET @sqlStatement = 'SELECT @result = 2'

     

    EXEC sp_executesql @sqlStatement, @sqlParameters, @result = @sqlResult OUTPUT

     

    PRINT @sqlResult

     


    Esquerdo: mesmo assim, acho que o exemplo que coloquei anteriormente é mais fácil para resolver o teu problema.

    Um abraço,

    Raul Santos Neto

    quarta-feira, 19 de novembro de 2008 19:24
  • Raul , brother....viajei ....isso ae faz a mesma coisa q o codigo anterior ? Nao ne?

     

    A store procedure faria o q? o select?

     

    Po explica ae o q significa esse codigo , pq pra mim ta MATRIX puro....so vejo letras...rss

     

    abracao

     

    quinta-feira, 20 de novembro de 2008 11:52
  • Oi Raul,

     

    Interessante esse código. O sp_executesql permite muitas coisas interessantes. Esse tipo de implementação inclusive permite converter strings para binários (coisa que a gente não faz com o CAST).

     

    Code Snippet

    -- Não converte

    SELECT CAST('0x0123456789abcdef' AS VARBINARY(MAX))

     

    -- Converte

    DECLARE @sql AS NVARCHAR(4000), @b AS VARBINARY(1000), @s AS VARCHAR(2002);

    SET @s = '0x0123456789abcdef';

    SET @sql = N'SET @o = ' + @s + N';';

    EXEC sp_executesql

    @stmt = @sql,

    @params = N'@o AS VARBINARY(1000) OUTPUT',

    @o = @b OUTPUT;

     

    SELECT @b;

     

     

    [ ]s,

     

    Gustavo

    quinta-feira, 20 de novembro de 2008 14:20
  • É possivel fazer com o seguinte comando:

     

     

     EXEC sp_executesql @sql_stmt, N'@r date OUTPUT', @r OUTPUT


     

    sexta-feira, 17 de dezembro de 2010 19:42