Динамический SQL - Запросить другую базу данных в зависимости от параметра - PullRequest
2 голосов
/ 20 сентября 2011

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

Я пытался это сделать, чтобы создать динамический SQL-оператор для выполнения с sp_executesql:

(это всего лишь тестовый сценарий, кстати):

declare @sql nvarchar(1000)
set @sql = 'select top 10 * from [SERVER].@dbName.dbo.[LL]'
exec sp_executesql @sql, N'@dbName nvarchar(50)', @dbName = N'[TheDatabase1]'

Это дает ошибку Incorrect syntax near '@dbName'.

Есть ли другой вариант, который я мог бы рассмотреть?

PS - схема базы данных не находится под моим контролем.

1 Ответ

3 голосов
/ 20 сентября 2011

Невозможно параметризовать имя базы данных - вам нужно будет соединить его напрямую.

set @sql = 'select top 10 * from [SERVER].' + N'[TheDatabase1]' + '.dbo.[LL]'

Здесь очень хорошая (хотя и длинная) статья Эрланда Соммарскога о динамическом SQL.

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