Il problema con il primo è che quello che stai facendo è USE 'myDB'
invece di USE myDB
.stai passando una stringa; ma USE sta cercando un riferimento esplicito.
Quest'ultimo esempio funziona per me.
declare @sql varchar(20)
select @sql = 'USE myDb'
EXEC sp_sqlexec @Sql
-- also works
select @sql = 'USE [myDb]'
EXEC sp_sqlexec @Sql