Usuário com melhor resposta
@r = exec(@sql)

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 ....
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 SnippetCREATE
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
-
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 SnippetDECLARE
@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
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 SnippetCREATE
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
-
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 SnippetDECLARE
@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
-
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!
-
Olá Gustavo,
Dê uma olhada no exemplo abaixo. Cada dia aprendendo algo novo!
Code SnippetDECLARE
@sqlStatement NVARCHAR(100)DECLARE
@sqlParameters NVARCHAR(100)DECLARE
@sqlResult INTSET @sqlParameters = '@result INT OUTPUT'
SET
@sqlStatement = 'SELECT @result = 2'EXEC
sp_executesql @sqlStatement, @sqlParameters, @result = @sqlResult OUTPUTPRINT @sqlResult
Um abraço,
Esquerdo: mesmo assim, acho que o exemplo que coloquei anteriormente é mais fácil para resolver o teu problema.Raul Santos Neto
-
-
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
-