Problemet med det förstnämnda är att det du gör är USE 'myDB'
istället för USE myDB
.du skickar en sträng; men USE letar efter en explicit referens.
Det senare exemplet fungerar för mig.
declare @sql varchar(20)
select @sql = 'USE myDb'
EXEC sp_sqlexec @Sql
-- also works
select @sql = 'USE [myDb]'
EXEC sp_sqlexec @Sql