Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как определить на какой СУБД выполняется запрос - SQL Server или Oracle  [new]
xdmytro
Member

Откуда: Киев
Сообщений: 7
Добрый день,

можно ли написать SQL-запрос который определяет на какую СУБД ссылается коннекшен, на Oracle или SQL Server. Этот запрос должен без ошибок выполняться как на Oracle так и на SQL Server.

Идеально было бы чтото типа такого:

SELECT
  CASE WHEN <что-нибудь умное> THEN 'ORACLE' ELSE 'SQLSERVER' END AS DBMS
FROM
  dual

Зарание спасибо!

Дмытро
6 авг 09, 10:33    [7504109]     Ответить | Цитировать Сообщить модератору
 Re: Как определить на какой СУБД выполняется запрос - SQL Server или Oracle  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
SQL Server не понимает FROM dual


----
www.hramin.jino-net.ru
Картинка с другого сайта.
6 авг 09, 10:42    [7504192]     Ответить | Цитировать Сообщить модератору
 Re: Как определить на какой СУБД выполняется запрос - SQL Server или Oracle  [new]
xdmytro
Member

Откуда: Киев
Сообщений: 7
Ramin
SQL Server не понимает FROM dual

Ок, допустим что dual создана вручную.
6 авг 09, 10:47    [7504224]     Ответить | Цитировать Сообщить модератору
 Re: Как определить на какой СУБД выполняется запрос - SQL Server или Oracle  [new]
Glory
Member

Откуда:
Сообщений: 104760
xdmytro
Ramin
SQL Server не понимает FROM dual

Ок, допустим что dual создана вручную.

Ну так будьте последовательны, создайт в dual столбец с информацией о сервере
6 авг 09, 10:48    [7504232]     Ответить | Цитировать Сообщить модератору
 Re: Как определить на какой СУБД выполняется запрос - SQL Server или Oracle  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
автор
WHEN <что-нибудь умное>

а как ты думаеш что умное ?
можно определить смотря на профилер...

----
www.hramin.jino-net.ru
Картинка с другого сайта.
6 авг 09, 10:50    [7504247]     Ответить | Цитировать Сообщить модератору
 Re: Как определить на какой СУБД выполняется запрос - SQL Server или Oracle  [new]
xdmytro
Member

Откуда: Киев
Сообщений: 7
Glory
xdmytro
Ramin
SQL Server не понимает FROM dual

Ок, допустим что dual создана вручную.

Ну так будьте последовательны, создайт в dual столбец с информацией о сервере

Я не имею возможности менять что либо в БД. Мы разрабатываем аналитический модуль.
Таблица dual создана и она эквивалентна dual в Oracle. Это сделано для обеспечения кроссплатформености модуля.
6 авг 09, 10:57    [7504296]     Ответить | Цитировать Сообщить модератору
 Re: Как определить на какой СУБД выполняется запрос - SQL Server или Oracle  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
А что в Oracle вернет запрос
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='SYS' AND TABLE_NAME='dual'
Может, я глупость написал. Не силён пока в Oracle.
В MSSQL запрос ничего не вернёт.
6 авг 09, 11:00    [7504325]     Ответить | Цитировать Сообщить модератору
 Re: Как определить на какой СУБД выполняется запрос - SQL Server или Oracle  [new]
Козьма Прутков
Member

Откуда: Москва
Сообщений: 186
А можно поинтересоваться, где непосредственно нужно определеить СУБД? Если это клиентское приложение - наверняка можно в нем докопать, какой драйвер/провайдер/что-то еще используется.
Можно еще сделать select 1 from dual, и если упадет - MSSQL, если вернет 1 - Oracle. Но это так себе способ, лучше бы его зарыть в один метод, которым будут все пользоваться, чтобы потом усовершенствовать есичо.

------------
Чем сложнее решение задачи, тем больше вероятность, что оно неправильное
6 авг 09, 11:02    [7504345]     Ответить | Цитировать Сообщить модератору
 Re: Как определить на какой СУБД выполняется запрос - SQL Server или Oracle  [new]
xdmytro
Member

Откуда: Киев
Сообщений: 7
Козьма Прутков,

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

Из функционала единственное что доступно это выполнить какой-то SQL запрос.

Вариант с проверить падает ли какой-то запрос не подходит - в этом случае на какой-то субд отчет будет выполняться с ошибкой..
6 авг 09, 11:14    [7504446]     Ответить | Цитировать Сообщить модератору
 Re: Как определить на какой СУБД выполняется запрос - SQL Server или Oracle  [new]
xdmytro
Member

Откуда: Киев
Сообщений: 7
iap
А что в Oracle вернет запрос
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='SYS' AND TABLE_NAME='dual'


В Oracle нет таблицы INFORMATION_SCHEMA.TABLES, вместо нее DBA_TABLES
6 авг 09, 11:42    [7504712]     Ответить | Цитировать Сообщить модератору
 Re: Как определить на какой СУБД выполняется запрос - SQL Server или Oracle  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
xdmytro
iap
А что в Oracle вернет запрос
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='SYS' AND TABLE_NAME='dual'


В Oracle нет таблицы INFORMATION_SCHEMA.TABLES, вместо нее DBA_TABLES
Это не таблица. Это VIEW. Прописанное в стандарте ISO, вообще-то
6 авг 09, 11:53    [7504810]     Ответить | Цитировать Сообщить модератору
 Re: Как определить на какой СУБД выполняется запрос - SQL Server или Oracle  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
iap
xdmytro
iap
А что в Oracle вернет запрос
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='SYS' AND TABLE_NAME='dual'


В Oracle нет таблицы INFORMATION_SCHEMA.TABLES, вместо нее DBA_TABLES
Это не таблица. Это VIEW. Прописанное в стандарте ISO, вообще-то
Нету в оракле пока такого...
6 авг 09, 11:59    [7504857]     Ответить | Цитировать Сообщить модератору
 Re: Как определить на какой СУБД выполняется запрос - SQL Server или Oracle  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
xdmytro
Козьма Прутков,
Вариант с проверить падает ли какой-то запрос не подходит - в этом случае на какой-то субд отчет будет выполняться с ошибкой..


ну так на этот случай и нужна обработка ошибок... т.е. ошибку вы можете вопринимать не как ошибку, а как результат о том что вы, например, работаете уже с Oracle
6 авг 09, 13:09    [7505373]     Ответить | Цитировать Сообщить модератору
 Re: Как определить на какой СУБД выполняется запрос - SQL Server или Oracle  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4255
если у вас ADO то легко и3 пропертей может получить имя провайдера

    _ConnectionPtr  pConnection = getMyADOConnection();

    wchar_t wzConnStr[1024] = {L'\0'};

    wcsncpy( wzConnStr, (wchar_t *)pConnection->ConnectionString, _countof(wzConnStr)-1 );

дальше парсите строку и получаете искомое
6 авг 09, 22:00    [7508238]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить