Как вы заметили, оператор USE
не принимает переменную в качестве параметра.Единственная альтернатива, которая быстро приходит на ум, является довольно грубой и чрезвычайно подверженной ошибкам, но здесь вы идете:
EXEC ('USE ' + @db_name + '
SELECT * FROM some_table
INSERT INTO some_table VALUES (1)')
Я надеюсь, что кто-то еще может сделать лучше: -)