Est-il possible d'affecter à une variable une valeur renvoyée par la procédure stockée exec?
Quelque chose comme
DECLARE @count int
SET @count = Execute dbo.usp_GetCount @Id=123
Vous pouvez utiliser sp_executesql
au lieu de exec
à affecter aux paramètres de sortie scalaire
DECLARE @out int
EXEC sp_executesql N'select @out_param=10',
N'@out_param int OUTPUT',
@out_param=@out OUTPUT
SELECT @out
Pour exec
je ne sais que faire avec une variable de table
declare @out table
(
out int
)
insert into @out
exec('select 10')
select *
from @out
Pour les procédures stockées, vous utiliseriez également un paramètre output
ou un code retour. Ce dernier ne peut renvoyer qu'un seul entier et est généralement préféré pour renvoyer des codes d'erreur plutôt que des données. Les deux techniques sont présentées ci-dessous.
create proc #foo
@out int output
as
set @out = 100
return 99
go
declare @out int, @return int
exec @return = #foo @out output
select @return as [@return], @out as [@out]
drop proc #foo
Si vous utilisez RETURN dans le proc
DECLARE @count int
EXECUTE @count = dbo.usp_GetCount @Id=123
Paramètre OUTPUT
DECLARE @count int
EXECUTE dbo.usp_GetCount @Id=123, @count OUTPUT
Redirige les résultats vers la table/variable de table temporaire
DECLARE @count int
DECLARE @cache TABLE (CountCol int NOT NULL)
INSERT @cache EXECUTE dbo.usp_GetCount @Id=123
SELECT @count = CountCol FROM @cache
Vous ne pouvez pas affecter un jeu d'enregistrements du proc stocké directement à une variable scalaire
Comme d'habitude, de nombreuses façons de le faire, mais la plus simple est:
DECLARE @count int
Execute @count = dbo.usp_GetCount @Id=123