Eu tenho um pedaço de SQL dinâmico que preciso executar e, em seguida, preciso armazenar o resultado em uma variável.
Eu sei que posso usar, sp_executesql
mas não consigo encontrar exemplos claros sobre como fazer isso.
tsql
dynamic-sql
JohnIdol
fonte
fonte
@retvalOUT=@retval OUTPUT
? O terceiro parâmetro do não deveriasp_executesql
ser justo@retval OUTPUT
?EXEC sp_executesql @sSQL, @ParmDefinition, @retval OUTPUT;
fonte
insert into @tab
. Se você tentarinsert into @tab
e executar múltiplosexecute sp_executesql
, com sql diferente,select * from @tab
só mostra os resultados do primeiro executarfonte
Declarar @variable int
Exec @variable = proc_name
fonte
Os valores de retorno geralmente não são usados para "retornar" um resultado, mas para retornar com êxito (0) ou um número de erro (1-65K). Acima de tudo, parece indicar que sp_executesql não retorna um valor, o que não está correto. sp_executesql retornará 0 para êxito e qualquer outro número para falha.
Abaixo, @i retornará 2727
O SSMS mostrará essa mensagem 2727, nível 11, estado 1, linha 1 Não é possível encontrar o índice 'NonExistantStaticsName'.
fonte
DECLARE @ValueTable TABLE (valor VARCHAR (100))
fonte
Se você deseja retornar mais de 1 valor, use isto:
os valores retornados estão em @retIndex e @retText
fonte
Aqui está algo que você pode tentar
fonte
Isso foi há muito tempo, portanto, não tenha certeza se isso ainda é necessário, mas você pode usar a variável @@ ROWCOUNT para ver quantas linhas foram afetadas com a instrução sql anterior.
Isso é útil quando, por exemplo, você constrói uma instrução de atualização dinâmica e a executa com exec. @@ ROWCOUNT mostraria quantas linhas foram atualizadas.
Aqui está a definição
fonte
Isso funcionou para mim:
fonte