Thank you for informing us that sp_executesql parameters may be OUTPUT parameters. I didn't find that anywhere in BOL.
Here is an example:
USE pubs
declare @sql nvarchar(3000)
declare @d datetime
set @sql = N'
-- compute the same or next date that is in Sales table.
SET NOCOUNT ON
declare @o_date datetime, @p_date datetime
set @p_date = convert(datetime,convert(varchar(10),@date, 120)) -- chop off hours
select @o_date = min(ord_date) from Sales where ord_date >= @P_date
if @@rowcount = 0
select @o_date = max(ord_date) from Sales where ord_date < @P_date
if @o_date is not null
set @next_date = @o_date
else
set @next_date = @p_date
'
exec dbo.sp_executesql @sql
, N'@date datetime, @next_date datetime OUT'
, '1993-05-25', @next_date = @d OUT
print @d