Динамический доступ к таблицам из другой базы данных внутри пользовательской функции - PullRequest
3 голосов
/ 17 марта 2010

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

Я попытался создать динамическую строку запроса внутри функции, используя имя базы данных, которое хранится в таблице конфигурации, но:

  1. Когда я пытался exec(@sqlStatement) SQL Server сказал, что выполнение строки не разрешено внутри функции.
  2. Затем я попытался exec sp_executesql @sqlStatement, и функция была создана, но при ее выполнении SQL Server сообщает, что внутри функции вы можете запускать только расширенные функции и процедуры.

Таким образом, вопрос заключается в следующем: возможно ли создать функцию или хранимую процедуру для доступа к таблице в другой базе данных без необходимости повторного создания этой функции, когда имя базы данных отличается?

ТИА.

1 Ответ

3 голосов
/ 17 марта 2010

Я бы порекомендовал вам остановиться на фиксированных именах баз данных, чтобы избежать всей этой проблемы с использованием динамического sql. Разве вы не можете придумать уникальные имена баз данных, такие как: your_company_name_XYZ и your_company_name_ABC? если это не вариант, вы будете делать много динамического SQL, вы должны прочитать Проклятие и благословения динамического SQL Эрланда Соммарского

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

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