No es que exista una sola forma de gestionar sql dinámico, pero una de las cosas buenas del sp_executesql es que ya tiene contemplada la necesidad de pasar parámetros de entrada y salida.
Código:
DECLARE @sql_stmt NVARCHAR(500)
DECLARE @param INT
SET @sql_stmt = N'SELECT @paramOUT = COUNT(*) FROM sys.sysobjects'
EXEC sp_executesql @sql_stmt, N'@ParamOUT INT OUTPUT', @paramOUT=@param OUTPUT
IF (@param > 0)
SELECT 'Cantidad:' + cast(@param as varchar(10))
Saludos