Das Problem mit ersterem ist, dass Sie USE 'myDB'
verwenden statt USE myDB
.Sie übergeben einen String; aber USE sucht nach einer expliziten Referenz.
Das letzte Beispiel funktioniert für mich.
declare @sql varchar(20)
select @sql = 'USE myDb'
EXEC sp_sqlexec @Sql
-- also works
select @sql = 'USE [myDb]'
EXEC sp_sqlexec @Sql