Я не знаю, соответствует ли это вашему запросу о "наилучшей практике" или его лучше описать как "мерзкий взлом" :) Однако вот что мы делаем в этой ситуации:
У нас есть центральная база данных. В ней есть таблица с названием Базы данных со списком имен клиентов и баз данных.
Например:
ClientName DatabaseName
Client A TicketsDatabase_ClientA
B Customer TicketsDatabase_BCustomer
Мы добавляем набор данных в отчет под названием Базы данных, который имеет следующий оператор Sql:
SELECT ClientName, DatabaseName FROM Databases
Мы добавляем строковый параметр в отчет под названием База данных, который использует этот набор данных в качестве своего параметра «Из запроса», где в поле Значение указано значение DatabaseName, а в поле метки указано ClientName. Мы также добавляем небольшую метку шрифта 6pt в заголовок отчета с выражением = Parameters! Database.Label, чтобы мы знали, какую базу данных использует этот отчет.
Так что теперь у нас есть способ выбрать базу данных, и когда мы создаем больше баз данных, мы можем добавить их в нашу централизованную таблицу, и все отчеты, которые позволяют выбирать базы данных, автоматически получат новую базу данных в качестве опции.
Теперь нам просто нужно обновить оператор Sql для нашего основного набора данных, на котором основан отчет, чтобы получать информацию из правильной базы данных, например, так (помните, что оператор Sql является просто строковым выражением, как и все остальное в Reporting Услуги, вы можете построить его динамически):
="SELECT Field1, Field2, Field3 "
&"FROM " & Parameters!Database.Value & ".dbo.MyTable "
Sql Server не против выпрыгнуть из текущей базы данных, чтобы посмотреть в другой базе данных, пока учетные данные приемлемы, поэтому это позволяет вам динамически выбирать данные из любой базы данных, которую вы хотите, независимо от того, где фактические данные источник подключен к.
Конечно, это предполагает, что ваши структуры таблиц одинаковы для данных, о которых вы сообщаете.