Где я должен поместить общую хранимую процедуру в SQL Server - PullRequest
2 голосов
/ 12 декабря 2011

Мой SQL Server 2008 имеет

  1. одна центральная база данных, которая имеет некоторые глобальные функции, например, сопоставление с указанной клиентской БД.
  2. 50 + клиентские БД
  3. Master DB .. (MS по умолчанию)
  4. ASPState для сеанса.

Теперь я пытаюсь добавить эту хранимую процедуру usp_RethrowError (http://msdn.microsoft.com/en-us/library/ms179296.aspx), которая возвращает сообщение от try...catch.. SQL на мой сервер.

Поскольку хранимая процедура является распространенным sp, я хочу использовать ее в центральной БД и во всех клиентских БД. Где я должен положить это? в центральном или дублируете его в каждой клиентской БД?

Есть ли какие-либо проблемы или проблемы с производительностью, если хранимый процесс помещен в центральный, caz в клиентской БД, я должен написать что-то вроде [central].dbo.usp_RethrowError

Как насчет того, чтобы поместить его в master db?

Большое спасибо

Ответы [ 3 ]

2 голосов
/ 12 декабря 2011

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

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

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

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

1 голос
/ 12 декабря 2011

В дополнение к другим соображениям вы также можете рассмотреть использование синонима .Таким образом, вы можете создать централизованную базу данных для ваших общих процедур [центральный], но ваш код должен указывать на синоним этих процедур.В будущем, если вам нужно перейти к автономной версии, переместите централизованные процессы в локальные базы данных и отбросьте синоним.

1 голос
/ 12 декабря 2011

Это зависит от того, придется ли когда-либо перемещать сервер какой-либо из ваших клиентских баз данных без остальных баз данных.

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

Если базы данных никогда не будут перемещаться по отдельности на другой сервер, я бы добавил хранимую процедуру в базу данных master.

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