проверить, выходит ли база данных на сервере объединения SQL - PullRequest
0 голосов
/ 02 июня 2011

Я хочу объединить запрос из нескольких баз данных.но перед объединением я хочу проверить, завершается ли база данных, затем объединение, если вторая база данных выходит, затем объединение и так далее ...

IF EXISTS(SELECT * FROM sys.sysdatabases where name='FirstDB')
select * from FirstDB.dbo.tablename
union
IF EXISTS(SELECT * FROM sys.sysdatabases where name='SecondDB')
select * from SecondDB.dbo.tablename.

Как это сделать.Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 02 июня 2011

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

Если предположить, что базы данных действительно появляются и исчезают случайным образом, единственным «практичным» вариантом является динамический SQL

...
IF DB_ID('FirstDB') IS NOT NULL
   SET @sql ='select * from FirstDB.dbo.tablename'

IF DB_ID('SecondDB') IS NOT NULL
   SET @sql =  @sql + CASE WHEN @sql = '' THEN '' ELSE 'union ' END +
                      'select * from SecondDB.dbo.tablename'
...
2 голосов
/ 02 июня 2011

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

0 голосов
/ 02 июня 2011

Определите представление с фиксированным именем на каждом сервере: На сервере FirstDB:

CREATE DATABASE SOME_DATABASE;
CREATE VIEW SOME_DATABASE.FIXED_TABLENAME AS SELECT * FROM FirstDB.dbo.tablename

На сервере SecondDB:

CREATE DATABASE SOME_DATABASE;
CREATE VIEW SOME_DATABASE.FIXED_TABLENAME AS SELECT * FROM SecondDB.dbo.tablename

В коде в любой БД:

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