TSQL Абстракция имени и схемы БД - PullRequest
1 голос
/ 15 марта 2012

Я проверил знакомые посты и надеюсь, что это не было рассмотрено ранее.

Я ищу способы абстрагировать имя БД и схему при вызове хранимой процедуры вбаза данных отличается от текущего местоположения.Что-то следующим образом:

execute [DatabaseName]. [Schema]. [StorageProcedureName]

Идея состоит в том, чтобы предоставить БД и схему в зависимости от требования времени выполнения,Очевидный способ сделать это - использовать динамический sql, но для системы, которую я использую, это большое нет-нет.Кто-нибудь знает в любом случае абстрагировать имя БД и схему в этом случае?Единственные варианты, которые я могу придумать, - это сохранить имя и т. Д. В переменных, а некоторые - как включить его в вызов execute или иметь возможность хранить экземпляр БД, но я не знаю, возможно ли это вообще.

Любой отзыв будет полезен, спасибо.

Ответы [ 3 ]

0 голосов
/ 15 марта 2012

Немного трудно понять , почему стоит за этим подходом. Что вызывает ваши хранимые процедуры? Что может быть лучше для изменения базы данных, используя другую строку подключения?

Если вы хотите переключить БД внутри оператора TSQL, посмотрите на команду USE и для запуска под другим пользователем с доступом к другой схеме посмотрите на EXECUTE AS

0 голосов
/ 03 апреля 2012

Я думаю, что вы, возможно, ищете такую ​​конструкцию, как SYNONYM?Это должно позволить тот уровень абстракции, который я считаю

CREATE SYNONYM MySP FOR MyDatabase1.dbo.MySP

http://blog.sqlauthority.com/2008/01/07/sql-server-2005-introduction-and-explanation-to-synonym-helpful-t-sql-feature-for-developer/

0 голосов
/ 15 марта 2012

Я не уверен насчет абстрагирования, как вы описываете (например, параметр или что-то?), Но одна идея может заключаться в том, чтобы сделать что-то вроде этого:

IF @db = 'dababase1'
BEGIN
   IF @schema = 'schema1'
   BEGIN
      EXECUTE database1.schema1.procedure
   END
   IF @schema = 'schema2'
   BEGIN
      EXECUTE database1.schema2.procedure
   END
   ...
END
IF @db = 'database2'
BEGIN
...

Вы должны знать об этомвремя разработки, какими были все возможные базы данных и схемы ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...