Самый эффективный способ выбора записей в одной базе данных на основе набора результатов из совершенно другой базы данных - PullRequest
0 голосов
/ 16 декабря 2009

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

Итак, используя пакет DTS, я беру данные о продукте из Pervasive и обрабатываю их, чтобы получить одну таблицу MSSQL с номером продукта # (первичный ключ для обеих баз данных) и всеми столбцами для функций продукта. Очень просто и быстро сделать запрос на нашем сайте.

База данных Pervasive - это база данных, используемая системой ERP, поэтому она всегда содержит самые последние данные инвентаризации для каждого продукта. Теперь мне нужно найти лучший способ наиболее эффективно извлекать информацию инвентаризации из базы данных Pervasive на основе записей, извлекаемых из базы данных MSSQL в режиме реального времени.

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

Кэширование всех данных инвентаризации из базы данных Pervasive не будет работать, потому что мне нужно, чтобы они работали в режиме реального времени.

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

Спасибо.

Ответы [ 3 ]

1 голос
/ 16 декабря 2009

Чтобы получить доступ к данным в другой базе данных из SQL Server, вам необходимо сначала создать связанный экземпляр сервера на SQL Server, указывающий на другую базу данных (в этом примере - Pervasive) с соответствующими учетными данными / разрешения. Эта статья предназначена для связи MySQL с SQL Server 2008 , но шаги те же.

Как только это будет сделано, вы можете писать запросы в SQL Server, как если бы вы имели дело с одной базой данных.

0 голосов
/ 16 декабря 2009

Я не совсем уверен, применимо ли это, но в MySQL я использовал оператор IN для одновременного извлечения значительных наборов данных (до тысяч).

SELECT a,b,c FROM table WHERE id IN (123,234,345,456,...)

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

0 голосов
/ 16 декабря 2009

Не могли бы вы сохранить кеш в MSSQL и заставить Pervasive обновить его с помощью триггера при изменении уровня инвентаря?

...