Понадобилось однажды быстро отчет сделать для смежного отдела, вроде все просто, но вся беда в том, что база находится на  Firebird.
Это не проблема когда под рукой есть хороший провайдер.
В качестве решения было принято использовать   SQL Server 2012  Express Advanced Services вместе со службой сервера отчетов.
Доступ к данным настраивался через связанный сервер.
 
- Для разработки понадобятся сам сервер Firebird , качаем нужную версию.
 - Устанавливаем сервер вместе с клиентскими компонентами.
 - Для работы с Firebird понадобится IBExpert personal - GUI оболочка для администрирования и выполнения скриптов. Качаем и устанавливаем.
 - Триальная версия oledb провайдера IBProvider для изучения внутренней структуры базы.
 - Инструкция по созданию связанного сервера с использованием IBProvider. Читаем и настраиваем
 
! Обязательно проверяем соединение скриптом из инструкции выше,  клиентскую библиотеку  fbclient.dll копируем в корень каталога  windows.
6. После того как настроили все по инструкции проверяем соединение.
begin  distributed transaction;
select  * from   FB_TEST...TEST_TABLE;
commit;
7. Если все хорошо приступаем к изучению базы по системным таблицам
--список  всех  таблиц
select  rdb$relation_name
from  FB_TEST...RDB$RELATIONS  t
where  rdb$view_blr is   null
and  (rdb$system_flag  is null   or rdb$system_flag   = 0);
--список  всех  столбцов
select  f.rdb$relation_name,  f.rdb$field_name
from   FB_TEST...RDB$RELATION_FIELDS  f
join   FB_TEST...RDB$RELATIONS  r on   f.rdb$relation_name  = r.rdb$relation_name
and  r.rdb$view_blr  is null
and  (r.rdb$system_flag  is null   or r.rdb$system_flag  = 0)
order  by 1,   f.rdb$field_position;
--проверка  индексов
SELECT  RDB$INDEX_NAME
FROM  FB_TEST...RDB$INDICES
WHERE  RDB$RELATION_NAME='TEST_TABLE'
--AND RDB$UNIQUE_FLAG IS NULL
--AND RDB$FOREIGN_KEY IS NULL;            
--детальная  информация  по  индексам
SELECT  RDB$INDEX_SEGMENTS.RDB$FIELD_NAME  AS field_name,
RDB$INDICES.RDB$DESCRIPTION  AS description,
(RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION  + 1)   AS field_position
FROM  FB_TEST...RDB$INDEX_SEGMENTS
LEFT  JOIN FB_TEST...RDB$INDICES  ON RDB$INDICES.RDB$INDEX_NAME  = RDB$INDEX_SEGMENTS.RDB$INDEX_NAME
LEFT  JOIN FB_TEST...RDB$RELATION_CONSTRAINTS  ON RDB$RELATION_CONSTRAINTS.RDB$INDEX_NAME  = RDB$INDEX_SEGMENTS.RDB$INDEX_NAME
WHERE  UPPER(RDB$INDICES.RDB$RELATION_NAME)='TEST_TABLE'          -- имя  таблицы
AND  UPPER(RDB$INDICES.RDB$INDEX_NAME)='APC_TEST_TABLE'  -- название  индекса
AND  RDB$RELATION_CONSTRAINTS.RDB$CONSTRAINT_TYPE  IS NULL
ORDER  BY RDB$INDEX_SEGMENTS.RDB$FIELD_POSITION
P.S  После того как необходимые запросы будут написаны и вы разберетесь со структурой базы, настраиваем связанный сервер  через  ODBC качаем  с оф.  сайта   провайдер
Настраиваем ODBC, системный   DSN
Проверяем соединение.Переписываем запросы на OpenQuery если это необходимо и наслаждаемся!
SELECT  *
FROM   openquery(fbnew,'select CH.FLASTNAME, CH.FFIRSTNAME , CH.FMIDDLENAME  ,CH.FID1, CH.FID0 from TEST_TABLE CH   ')

