Проблемът с първия е, че това, което правите, е USE 'myDB'
вместо USE myDB
.предавате низ; но USE търси изрична препратка.
Последният пример работи за мен.
declare @sql varchar(20)
select @sql = 'USE myDb'
EXEC sp_sqlexec @Sql
-- also works
select @sql = 'USE [myDb]'
EXEC sp_sqlexec @Sql