Using sp_executesql you can send an output parameter to your dynamic query.
DECLARE @sqlCommand NVARCHAR(MAX);
DECLARE @dateEnd DATETIME;
SET @sqlCommand = '
select top 1 @retVal = datetime
from IntradayHistory.dbo.IntradayDataHistory' + @product + '
where TickerID = ' + cast(@ticker as nvarchar(24)) + '
order by datetime desc
';
EXECUTE sp_executesql @sqlCommand, N'@retVal DATETIME OUTPUT', @retVal=@dateEnd OUTPUT;
SELECT @dateEnd;
Option B:
You can use temp table to store the result of dynamic query.
DECLARE @sqlCommand NVARCHAR(MAX);
SET @sqlCommand = '
select top 1 datetime
from IntradayHistory.dbo.IntradayDataHistory' + @product + '
where TickerID = ' + cast(@ticker as nvarchar(24)) + '
order by datetime desc
';
CREATE TABLE #temp1 (Result DATETIME);
INSERT INTO #temp1 EXEC (@sqlCommand);
SELECT * FROM #temp1;