Het probleem met de eerste is dat wat je doet is USE 'myDB'
in plaats van USE myDB
.je geeft een string door; maar USE zoekt naar een expliciete referentie.
Het laatste voorbeeld werkt voor mij.
declare @sql varchar(20)
select @sql = 'USE myDb'
EXEC sp_sqlexec @Sql
-- also works
select @sql = 'USE [myDb]'
EXEC sp_sqlexec @Sql