O problema com o primeiro é que o que você está fazendo é
USE 'myDB'
em vez de USE myDB
.você está passando uma string; mas USE está procurando uma referência explícita. O último exemplo funciona para mim.
declare @sql varchar(20)
select @sql = 'USE myDb'
EXEC sp_sqlexec @Sql
-- also works
select @sql = 'USE [myDb]'
EXEC sp_sqlexec @Sql