SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.09.2014 01:03:20

autumnrustle
Участник
Зарегистрирован: 04.09.2014
Сообщений: 2

Запросы к Связанному серверу MySQL через MS SQL Server

Дело такое:

есть сервер MS SQL Server c базой "base". Это основная база с которой работают через формы и запросы в access-файл, который есть на нескольких компьютерах, соединённых локальной сетью.

есть хостинг и MySQL база с возможностью удалённого подключения к ней. Собственно, она подключена к SQL Server как Связанный сервер c именем My_SQL

Что планируется:
основная база данных заполняется в течение дня. Периодически из этой базы из определённых таблиц и определённых полей должны копироваться все данные в базу MySQL в одну таблицу Autumn. Потом планируется с сайта выполнять запрос к MySQL: заходит человек, вводит, например, номер договора, и получает данные по своему договору - если для примера.

Так вот. Как тут быть? Как сделать запрос на выборку из связанного сервера, я уже нашёл:

SELECT * FROM OPENquery(My_SQL, 'Select * from Autumn')

Но он немного странный какой-то...

А как быть с комановкой определённых полей из определённых таблиц базы SQL SERVER и записи всего этого в таблицу Autumn базы MySQL. Причём, как быть с уже ранее добавленными данными? Удалять всё и записывать по новой?


Помогите, пожалуйста, разобраться с этим. Только-только начал во всё это вникать...

Неактивен

 

#2 06.09.2014 19:03:20

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Запросы к Связанному серверу MySQL через MS SQL Server

Про связанные серверы ничего не знаю. Для добавления только новых можно использовать несколько подходов. Например,
А. удалять все и заново вставлять (для не очень больших таблиц)
Б. определять максимальный id в таблицы MySQL и делать выборку только с id больше данного. При этом подходе обновления к старым данным не будут перенесены.
В. Делать ежедневно Б, а раз в неделю А.

Неактивен

 

#3 07.09.2014 15:16:00

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Запросы к Связанному серверу MySQL через MS SQL Server

Судя по документации, на OPENQUERY можно ссылаться как на целевую таблицу,
поэтому если Вы мысленно представите, что OPENQUERY(My_SQL, 'SELECT * FROM Autumn') —
это аналог таблицы Autumn в MSSQL, то сможете делать обычные изменения. Т.е.
должно работать что-то типа
UPDATE OPENQUERY(My_SQL, 'SELECT * FROM Autumn') AS my, Autumn AS ms
SET my.fieldname = ms.fieldname WHERE my.id = ms.id

Учтите, что в отличие от MySQL, мы не являемся специалистами в MSSQL, и многие
штуки в этом треде будут спекуляциями, основанными на общем здравом смысле и
документации smile

Неактивен

 

#4 07.09.2014 15:19:02

autumnrustle
Участник
Зарегистрирован: 04.09.2014
Сообщений: 2

Re: Запросы к Связанному серверу MySQL через MS SQL Server

paulus,

Спасибо. Разобрался. Вот пример с использованием представления count_ost:

USE base;
GO

INSERT openquery(My_SQL, 'SELECT ИД_Клиента, ИД_Обращения, Имя, Отчество, Номер_образца, Дата_поступления, Осталось, ДНК, Паспорт, Протокол FROM Autumn')
SELECT     Клиент.ИД_Клиента, Обращения.ИД_Обращения, Клиент.Имя, Клиент.Отчество, Обращения.Номер_образца, Обращения.Дата_поступления,
                      SUM(count_ost.Expr1) AS Остлось, CASE WHEN Обращения.ДНК = '1' THEN 'Да' ELSE 'Нет' END AS 'ДНК?',
                      CASE WHEN Обращения.Паспорт = '1' THEN 'Да' ELSE 'Нет' END AS 'Паспорт?',
                      CASE WHEN Обращения.Протокол = '1' THEN 'Да' ELSE 'Нет' END AS 'Протокол?'
FROM         Клиент INNER JOIN
                      Обращения ON Клиент.ИД_Клиента = Обращения.ИД_Клиента INNER JOIN
                      count_ost ON Обращения.ИД_Обращения = count_ost.ИД_Обращения
GROUP BY Клиент.ИД_Клиента, Обращения.ИД_Обращения, Клиент.Имя, Клиент.Отчество, Обращения.Номер_образца, Обращения.Дата_поступления,
                      Обращения.ДНК, Обращения.Паспорт, Обращения.Протокол

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson