Задавайте вопросы, мы ответим
Вы не зашли.
Дело такое:
есть сервер 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. Причём, как быть с уже ранее добавленными данными? Удалять всё и записывать по новой?
Помогите, пожалуйста, разобраться с этим. Только-только начал во всё это вникать...
Неактивен
Про связанные серверы ничего не знаю. Для добавления только новых можно использовать несколько подходов. Например,
А. удалять все и заново вставлять (для не очень больших таблиц)
Б. определять максимальный id в таблицы MySQL и делать выборку только с id больше данного. При этом подходе обновления к старым данным не будут перенесены.
В. Делать ежедневно Б, а раз в неделю А.
Неактивен
Судя по документации, на 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, и многие
штуки в этом треде будут спекуляциями, основанными на общем здравом смысле и
документации
Неактивен
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 Клиент.ИД_Клиента, Обращения.ИД_Обращения, Клиент.Имя, Клиент.Отчество, Обращения.Номер_образца, Обращения.Дата_поступления,
Обращения.ДНК, Обращения.Паспорт, Обращения.Протокол
Неактивен