Как я могу получить хранимую процедуру для вызова внешней базы данных на том же сервере SQL? - PullRequest
3 голосов
/ 13 января 2010

Я имею дело с веб-приложением, которое использует 2 разные базы данных для хранения информации. Эти базы данных имеют некоторые ключи базы данных, которые ссылаются на записи в другой базе данных. Я хотел бы иметь возможность написать хранимую процедуру в SQL 2005, которая может изменять данные в текущей базе данных, а также выходить и изменять некоторые данные в другой базе данных. Это возможно? Как?

Ответы [ 2 ]

6 голосов
/ 13 января 2010

Вы можете полностью определить имена таблиц (я предполагаю, что базы данных находятся на одном сервере БД)

например. из sproc в DB1:

UPDATE DB2.dbo.MyOtherTable
SET Field = 'SomeValue'
WHERE ID = 1
2 голосов
/ 13 января 2010

Поскольку вы работаете на одном и том же сервере SQL, это относительно простая задача.

Везде, где вы ссылаетесь на таблицу из другой базы данных, вам просто необходимо присвоить ей имя этой базы данных.

Итак, где вы могли бы иметь:

Update table1
Set col = 'val'
Where Id = @Id

У вас просто есть:

Update DatabaseName.dbo.table1
Set col = 'val'
Where Id = @Id

Обратите внимание, что .dbo - это схема базы данных, в которой существует ваша таблица.

Если вам нужно перейти на другой сервер, вам потребуется настроить связанный сервер.

Две дополнительные вещи, которые вам могут пригодиться:

Синонимы

Синонимы позволяют создавать псевдонимы к ссылочной таблице, используя код ниже:

CREATE SYNONYM [dbo].[TheOtherTable] FOR [OtherDataBase].[dbo].[OtherTable]

Это позволяет вам просто использовать TheOtherTable в ваших процедурах.

Режим SQLCMD

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

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

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