Я считаю, что кому-то нужно решение для этого, вот одно:
если вы используете динамический оператор USE, все ваши запросы должны быть динамическими, потому что все должно быть в одном контексте.
Вы можете попробовать с SYNONYM, в основном это ALIAS для конкретной таблицы, этот SYNONYM вставляется в таблицу sys.synonyms, поэтому у вас есть доступ к ней из любого контекста
Посмотрите это статическое утверждение:
CREATE SYNONYM MASTER_SCHEMACOLUMNS FOR Master.INFORMATION_SCHEMA.COLUMNS
SELECT * FROM MASTER_SCHEMACOLUMNS
Теперь динамический:
DECLARE @SQL VARCHAR(200)
DECLARE @CATALOG VARCHAR(200) = 'Master'
IF EXISTS(SELECT * FROM sys.synonyms s WHERE s.name = 'CURRENT_SCHEMACOLUMNS')
BEGIN
DROP SYNONYM CURRENT_SCHEMACOLUMNS
END
SELECT @SQL = 'CREATE SYNONYM CURRENT_SCHEMACOLUMNS FOR '+ @CATALOG +'.INFORMATION_SCHEMA.COLUMNS';
EXEC sp_sqlexec @SQL
--Your not dynamic Code
SELECT * FROM CURRENT_SCHEMACOLUMNS
Теперь просто измените значение @CATALOG, и вы сможете отобразить ту же таблицу, но из другого каталога.