Как сделать запрос из нескольких баз данных - PullRequest
0 голосов
/ 19 марта 2012

Мне нужно объединить запросы из нескольких баз данных, что-то вроде:

SELECT T1.*, T2.* FROM DatabaseA.dbo.Table1 AS T1
INNER JOIN DatabaseB.dbo.Table2 AS T2 ON T1.ID = T2.ID

Мои вопросы:

  • Как мне настроить строку подключения System.Data.SqlClient.SqlConnection? Должен ли я пропустить или оставить пустым Initial Catalog? Должен ли я установить его на DatabaseA?
  • Это хороший способ выполнить эту задачу? Я думаю подготовить третью БД без таблиц, но с учетом этого SELECT (я не могу поместить представление в существующие базы данных). Запрос обычно выполняется за 10/15 секунд, но пользователь должен ждать, так что будет оценено даже несколько секунд.

Все базы данных имеют одинаковые учетные данные для входа.

Ответы [ 3 ]

2 голосов
/ 19 марта 2012

Это зависит от логина в вашей строке подключения больше, чем Initial Catalog.

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

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

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

1 голос
/ 19 марта 2012

Первоначальный каталог будет запрашиваться без использования DBNAME.dbo.TABLENAME.Поэтому, если вы выберете DatabaseA в качестве начального каталога, вы можете сделать запрос следующим образом:

SELECT T1.*, T2.*
FROM Table1 AS T1
INNER JOIN DatabaseB.dbo.Table2 AS T2 ON T1.ID = T2.ID

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

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

Производительность: 10/15 секунд звучит очень долго.Вы должны быть в состоянии улучшить запрос и сократить его, используя индексы или улучшенный дизайн запроса.Создание представлений не улучшит задержку все же.Если вам нужна помощь с этим, пожалуйста, предоставьте более подробную информацию.

1 голос
/ 19 марта 2012

Строка подключения подключается к БД с правами доступа пользователя, независимо от базы данных. Если у пользователя есть доступ к выполнению запросов, у вас не возникнет никаких проблем.

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