Доступ к данным из другой базы данных в хранимой процедуре

Ниже приведена моя схема:

  • DB_A: schema_1, schema_2, schema_3
  • DB_B: schema_3

некоторые процедуры в ресурсах доступа schema_3 (таблица, представление, sp) из schema_1 и schema_2.

Все процедуры в schema_3 одинаковы для обоих dbs. Как получить доступ к schema_1 из schema_3 для обоих dbs .

Теперь я могу жестко кодировать DB_A в своих процедурах, но когда я перемещаю код на клиентскую машину, это создаст проблему, так как DB_A может быть не такой же (одна из причин заключается в том, что клиент является жалким и имеет QA, Dev и Prod на том же компьютере).

Второй параметр получает имя DB_A как параметр, но он сделает все динамические схемы schema_3 SPS (поскольку у меня не было никакого способа получить доступ к чему-то вроде @ DBName.schema_name.ResourceName).

Третий вариант – создание связанных серверов, которые снова не решают мою проблему по той же причине, что и в первую очередь.

Любая идея, как действовать, когда я не хочу, чтобы мои процедуры были динамическими, потому что 80% из них являются прямыми.

Изменить начало:

Поэтому я могу пересчитать его, поскольку у меня есть несколько баз данных с базой данных, имеющей ресурсы (таблица / представление / схема), которые должны быть разделены, а затем иметь другие базы данных (один или несколько), которые хранят процедуры, которые вычисляют данные из общей базы данных и сами база данных.

Общее имя базы данных не будет постоянным во всех средах, и я хочу их изменить (зависит от среды). Я пришел с решением, где я буду создавать синоним для всех разделяемых ресурсов, и все процедуры будут их использовать, поэтому все они относятся к общим ресурсам из первой базы данных.

Для каждой установки мне нужно изменить определение синонимов, чтобы отобразить правильное имя базы данных. Есть ли SYNONYM для имени базы данных, таким образом у меня будет меньше синонимов для обработки.

Ну, лучший выбор, который я нашел, выглядит следующим образом.

Создать синоним (независимая база данных DB_B ) для отдельных объектов (в общей базе данных DB_A ) с тем же именем в той же схеме. Таким образом, ваши существующие процедуры не должны изменяться и будут работать по мере необходимости. Синоним дает хорошую ссылку на это. Я скоро создам приложение, чтобы облегчить создание синонимов для подобных ситуаций.

 CREATE SYNONYM DB_B.schema_1.proc_1 FOR DB_A.schema_1.proc_1 

Вы можете запустить вашу процедуру в DB_A и создать представление из DB_A в DB_B :

 create view dbo.vw_B_Schema_3 as select * from DB_B.dbo.Schema_3 

Вам нужно будет создать три версии представления (dev, QA, prod.) Но представление будет единственным различием: определения процедур могут оставаться идентичными.

Если DB_A и DB_B находятся на одном сервере, убедитесь, что у вас есть разрешение в двух базах данных.

Теперь используйте [database]. [Schema]. [Object], когда вы используете базу данных других объектов

например: у меня две базы данных («служба поддержки», «интранет»)

от holdesk до интранета

 create view dbo.users as select login, name, lastname from intranet.dbo.user // [database].[schema].[object] user is a table in dbo schema from intranet database. where status = 1 ; 
  • Простое объяснение для PATINDEX
  • SQL Server С неработающим, недопустимым синтаксисом?
  • SQL Server: запрос для получения нескольких результатов в одном поле
  • Как правильно читать синтаксис SQL Server?
  • Запрос SQL WHERE в диапазоне дат
  • Я ищу надежный способ проверки хранимых процедур T-SQL. У кого-нибудь есть?
  • Неправильный синтаксис около '-'
  • Обновить запрос с помощью INNER JOIN между таблицами в двух разных базах данных на 1 сервере
  • Неправильный синтаксис рядом с ключевым словом «FOR» XML
  • Сохраненная процедура возвращает несколько наборов результатов
  • Синтаксис синтаксиса SQL?
  • Давайте будем гением компьютера.