Actually it works ,but the context will be gone as soon query ends
declare @dbname varchar(50)='model',
@query nvarchar(200)
set @query='use '+@dbname+'
select db_name()'
print @query
exec (@Query)
The above query prints model as database name and context is reverted back..
More details on this here:Switching between databases with dynamic SQL
Session-level changes made in a sub-process (i.e. EXEC / sp_executesql) go away when that sub-process ends. This covers USE and SET statements as well as any local temporary tables created in that sub-process.
one more way is to change SSMS to results to text option,copy that and execute that