SQL-запрос, включающий базы данных с нескольких серверов - PullRequest
0 голосов
/ 09 сентября 2011

В настоящее время это в ASP Classic:

Мой запрос в том виде, в котором он находится в данный момент:

SELECT     
    i.CONCOM
,   COALESCE(SUM(CASE WHEN C.CATEGORY_ID = '30' THEN 0 ELSE t.LOGMINS END), 0) AS TotalWithoutNew
,   COALESCE(SUM(t.LOGMINS), 0) AS TotalAllId 
FROM         
    INQUIRY AS i 
    INNER JOIN 
        TIMELOG AS t 
        ON t.INQUIRY_ID = i.INQUIRY_ID 
    INNER JOIN 
        PROD AS P 
        ON i.PROD_ID = P.PROD_ID 
    INNER JOIN 
        CATEGORY AS C 
        ON P.CATEGORY_ID = C.CATEGORY_ID 
WHERE 
    " & sqlwhereclause & " 
GROUP BY 
    i.CONCOM 
ORDER BY 
    totalwithoutnew desc"

База данных, к которой нужно подключиться, строка, которая работает для подключения

DatabaseConnectionDB.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & AccessDBLocation & "data.mdb;Jet OLEDB:Database Password=redacted;"

В базе данных доступа есть таблица tbl_customer, в которой есть два поля: компания и приоритет.Мне нужно присоединиться к i.concom и компании, чтобы она извлекала приоритет из второй базы данных.

Я не собираюсь врать, это намного выше меня, и я был бы признателен за любую помощь:)

1 Ответ

0 голосов
/ 09 сентября 2011

Я бы предложил несколько разных подходов к этому.

Gold

Реплицируйте данные tbl_Customer в базу данных, в которой есть все остальное.Мне это нравится больше всего, потому что попадание в эту базу данных Access с любой частотой неизбежно вступает в конфликт с любым внешним процессом, который записывает данные клиента в базу данных.Задача здесь состоит в том, чтобы определить подходящую частоту обновления (еженедельно, ежедневно, ежечасно) так, чтобы ваше приложение поддерживалось в актуальном состоянии, но вы не влияли на доступ.

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

Серебро

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

Бронза

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

DECLARE
    @query varchar(max)
,   @dyanmic_where varchar(max)
SELECT @query = N'
SELECT     
    i.CONCOM
,   COALESCE(SUM(CASE WHEN C.CATEGORY_ID = ''30'' THEN 0 ELSE t.LOGMINS END), 0) AS TotalWithoutNew
,   COALESCE(SUM(t.LOGMINS), 0) AS TotalAllId 
FROM         
    INQUIRY AS i 
    INNER JOIN 
        TIMELOG AS t 
        ON t.INQUIRY_ID = i.INQUIRY_ID 
    INNER JOIN 
        PROD AS P 
        ON i.PROD_ID = P.PROD_ID 
    INNER JOIN 
        CATEGORY AS C 
        ON P.CATEGORY_ID = C.CATEGORY_ID 
    INNER JOIN
        (
            -- this gets built dynamically based on retrieved values
            SELECT 1, ''hello kitty'', 0
            UNION ALL 2, '''', 3
        ) D (concom, company, priority)
        ON D.concom = i.CONCOM
WHERE 
    '+ @dyanmic_where + N'
GROUP BY 
    i.CONCOM 
ORDER BY 
    totalwithoutnew desc
'

EXECUTE(@query)

Если кто-то из них щекочет вашу фантазию,я знаю, и я буду рад предоставить более подробную информацию

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