Можно ли передать имя БД в качестве параметра - PullRequest
1 голос
/ 09 марта 2009

У меня есть около 100 сайтов, построенных в cms, каждый со своей базой данных. Каждая база данных имеет одинаковые таблицы.

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

Ниже я пытаюсь передать имя базы данных в качестве параметра, но, похоже, оно не работает.

...
@site nvarchar(250)

AS

SELECT *
FROM @site..cmsDocument
WHERE published = 1

Есть ли другой способ сделать это?

Ответы [ 5 ]

3 голосов
/ 09 марта 2009
SELECT @dbname = quotename(dbname)
SELECT @sql = ' SELECT ... FROM ' + @dbname + '.dbo.tablename WHERE ...'
EXEC sp_executesql @sql, @params, ...

Refs:

sp_executesql (Transact-SQL)

Проклятие и благословения динамического SQL

2 голосов
/ 09 марта 2009

Вы можете указать базу данных в строке подключения:

Источник данных = myServerAddress; Исходный каталог = myDataBase ; Идентификатор пользователя = myUsername; Пароль = myPassword;

1 голос
/ 09 марта 2009

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

0 голосов
/ 03 сентября 2014

Если запрос / процедура выполняется из приложения .NET, вы также можете программно изменить базу данных объекта подключения (VB.NET):

Using da As New SqlDataAdapter("SELECT * FROM cmsDocument WHERE published = 1", GetDatabaseConnection(ServerName))
     da.SelectCommand.Connection.ChangeDatabase("Foobar")
End Using
0 голосов
/ 09 марта 2009

Вы можете использовать недокументированную хранимую процедуру sp_MSforeachdb: sp_MSforeachdb 'SELECT * FROM? .. table_name_here'

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