caso io che qualcuno bisogno di una soluzione per questo, questo è uno:
se si utilizza un'istruzione USE dinamica tutta la vostra richiesta deve essere dinamico, perché hanno bisogno di essere tutto nello stesso contesto.
Puoi provare con SYNONYM, è fondamentalmente un ALIAS per una tabella specifica, questo SYNONYM è inserito nel sys.tavolo sinonimi in modo da avere accesso ad esso da qualsiasi contesto
Guardate questa dichiarazione statica:
CREATE SYNONYM MASTER_SCHEMACOLUMNS FOR Master.INFORMATION_SCHEMA.COLUMNS
SELECT * FROM MASTER_SCHEMACOLUMNS
Ora dinamica:
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
Ora basta modificare il valore di @CATALOG e si sarà in grado per elencare la stessa tabella ma da catalogo diverso.
fonte
2014-06-28 15:18:17
seguito Le informazioni di Preet, dovrai inserire tutte le query per USE/SELECT in una singola chiamata sp_sqlexec. L'USO non sopravviverà oltre la chiamata. –
Conosco questa soluzione, ma è brutta e illeggibile. Avere anche uno script che generi l'SQL finale sarebbe un'opzione. – Drejc
Scusa pensavo che stavi cercando una soluzione all'interno di SQL stesso. All'interno di SQL, hai solo l'approccio sp_sqlexec; l'altra opzione è costruire la sequenza SQL di USE/SELECT esternamente. Avrai comunque bisogno di costruire manualmente l'SQL ma, sul lato positivo, l'ambiente di scripting/applicazione scelto sarà più semplice per la manipolazione delle stringhe e non sembrerà così brutto. –