Set database name dynamically in SQL Server stored procedure?

Sometimes, the use of SYNONYMs is a good strategy:

CREATE SYNONYM [schema.]name FOR [[[linkedserver.]database.]schema.]name

Then, refer to the object by its synonym in your stored procedure.

Altering where the synonym points IS a matter of dynamic SQL, but then your main stored procedures can be totally dynamic SQL-free. Create a table to manage all the objects you need to reference, and a stored procedure that switches all the desired synonyms to the right context.

This functionality is only available in SQL Server 2005 and up.

This method will NOT be suitable for frequent switching or for situations where different connections need to use different databases. I use it for a database that occasionally moves around between servers (it can run in the prod database or on the replication database and they have different names). After restoring the database to its new home, I run my switcheroo SP on it and everything is working in about 8 seconds.

Leave a Comment