Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Никита Осенний
Member

Откуда:
Сообщений: 281
Дело такое:

есть сервер 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. Причём, как быть с уже ранее добавленными данными? Удалять всё и записывать по новой?


Помогите, пожалуйста, разобраться с этим. Только-только начал во всё это вникать...
3 сен 14, 22:30    [16532284]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Никита Осенний
А как быть с комановкой

Что такое "комановка" ?

Никита Осенний
Причём, как быть с уже ранее добавленными данными? Удалять всё и записывать по новой?

Ну так вам виднее - это же ваши данные.
4 сен 14, 09:24    [16533072]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Никита Осенний
Member

Откуда:
Сообщений: 281
Glory,

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

Так вообще можно? О_О
4 сен 14, 12:22    [16534144]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Никита Осенний
Так вообще можно?

Вы спрашиваете, можно ли написать команды INSERT/UPDATE ?
4 сен 14, 12:25    [16534166]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Никита Осенний
Member

Откуда:
Сообщений: 281
Glory,

автор
Вы спрашиваете, можно ли написать команды INSERT/UPDATE ?


меня интересует, как выполнить merge (обновление, если условие совпадает и вставка если не совпадает) в таблицу связанного сервер MySQL из таблиц сервера SQL Server.
4 сен 14, 12:28    [16534194]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Никита Осенний
меня интересует, как выполнить merge

Открываем хелп по команде MERGE и читаем

target_table
Is the table or view against which the data rows from <table_source> are matched based on <clause_search_condition>. target_table is the target of any insert, update, or delete operations specified by the WHEN clauses of the MERGE statement.

If target_table is a view, any actions against it must satisfy the conditions for updating views. For more information, see Modify Data Through a View.

target_table cannot be a remote table. target_table cannot have any rules defined on it.
4 сен 14, 12:31    [16534219]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Никита Осенний
Member

Откуда:
Сообщений: 281
Glory,

автор
target_table cannot be a remote table


=_= и как быть тогда?

Мне всего-то нужно периодически обновлять данные на связанном сервере некоторыми данными из SQL Server...

автор
основная база данных заполняется в течение дня. Периодически из этой базы из определённых таблиц и определённых полей должны копироваться все данные в базу MySQL в одну таблицу Autumn. Потом планируется с сайта выполнять запрос к MySQL: заходит человек, вводит, например, номер договора, и получает данные по своему договору - если для примера.
4 сен 14, 12:34    [16534254]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Никита Осенний
=_= и как быть тогда?

А как делали merge, когда не было такой команды ? Что вы думаете ?
4 сен 14, 12:37    [16534277]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Никита Осенний
Member

Откуда:
Сообщений: 281
Glory,

автор
А как делали merge, когда не было такой команды ? Что вы думаете ?


я думаю, очищали всю таблицу и записывали по новой. По крайней мере это я так думаю после недельного знакомства с SQL.
4 сен 14, 12:39    [16534300]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Никита Осенний
я думаю, очищали всю таблицу и записывали по новой.

А еще писали отдельные запросы на INSERT, UPDATE, DELETE
4 сен 14, 12:40    [16534310]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Никита Осенний
Member

Откуда:
Сообщений: 281
Glory,

Хорошо. Давайте по порядку. Вот, например, на добавление:

автор
INSERT openquery(My_sql, 'SELECT [список полей] FROM [имя таблицы на my_SQL_сервере]')
VALUES ([значения полей])


Получится типа:

автор
INSERT openquery(My_sql, 'SELECT [Фамилия, Номер_образца, Дата_поступления, Осталось] FROM [Autumn]')
VALUES ([значения полей])


А как вставить значения из SQL Server? Причём из разных таблиц и из запроса?
Фамилия - в Клиент
Номер образца, Дата_поступления - в Обращения
Осталось - в запросе search_ostatok
4 сен 14, 12:47    [16534357]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Никита Осенний
А как вставить значения из SQL Server?

Прочитать _всю_ статью про команду INSERT. Разобрать примеры в конце статьи

Никита Осенний
Причём из разных таблиц и из запроса?

Вы что не написали ни одного select-а "из разных таблиц и из запроса" ?
4 сен 14, 12:50    [16534376]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Никита Осенний
Member

Откуда:
Сообщений: 281
Glory,

автор
Прочитать _всю_ статью про команду INSERT. Разобрать примеры в конце статьи

не посоветуете толковую?

автор
Вы что не написали ни одного select-а "из разных таблиц и из запроса" ?


'SELECT [Фамилия, Номер_образца, Дата_поступления, Осталось] FROM [Autumn]') - это куда вставлять

VALUES ([значения полей]) - а это что и откуда.
Нет?
4 сен 14, 12:53    [16534404]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Никита Осенний
не посоветуете толковую?

Мда. Хелп продукта, который вы используете.
Хелп и пишут для того, чтобы можно было правильно использовать продукт
4 сен 14, 12:55    [16534413]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Никита Осенний
Member

Откуда:
Сообщений: 281
Glory,

немного начал разбираться. Только не хелпом продукта воспользовался, а вообще.

Возник вопрос такой... Значения поля Осталось я получал запросом в аксесе. А потом в другом запросе вставлял из предыдущего нужное мне поле.

А как быть в SQL Server???
4 сен 14, 14:04    [16534963]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Никита Осенний
немного начал разбираться. Только не хелпом продукта воспользовался, а вообще.

Знаю, знаю. Метод Тыка.

Никита Осенний
А как быть в SQL Server???

как то вот так
4 сен 14, 14:07    [16534991]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Никита Осенний
Member

Откуда:
Сообщений: 281
Glory,

и чего именно из перечисленного по ссылке вам не хватает? Или возмущает? Или ещё что-то?..

Запрос в аксесе был такой:

автор
SELECT Обращения.ИД_Обращения, IIf([Аллель]="-",1,0) AS Выражение1, Обращения.Дата_поступления
FROM Обращения INNER JOIN (Аллели INNER JOIN Заказанные_гены ON Аллели.ИД_Аллеля = Заказанные_гены.ИД_Аллеля) ON Обращения.ИД_Обращения = Заказанные_гены.ИД_Обращения
WHERE (((Обращения.Дата_поступления) Between Date() And Date()-150) AND ((Обращения.Готов)=No) AND ((Заказанные_гены.[Считать?])=Yes));


В поле Выражение1 я получал 1 и 0: единица, если Аллель равен -"", а ноль, если не равен. Таким образом я получал список цифр.

Во втором запросе я подключал из первого запроса поле Выражение 1 и суммировал, получая таким образом количество невыполненных работ для каждого обращения клиента. Всё было сделано так для того, чтобы можно было получить значение 0.

автор
SELECT Обращения.ИД_Обращения, Обращения.Номер_образца, Обращения.Дата_поступления, IIf([ДНК]=True,"Да","Нет") AS [ДНК?], IIf([Паспорт]=True,"Да","Нет") AS [Паспорт?], IIf([Протокол]=True,"Да","Нет") AS [Протокол?], Sum(v_rabote1_sub.Выражение1) AS Осталось
FROM Обращения INNER JOIN v_rabote1_sub ON Обращения.ИД_Обращения = v_rabote1_sub.ИД_Обращения
GROUP BY Обращения.ИД_Обращения, Обращения.Номер_образца, Обращения.Дата_поступления, IIf([ДНК]=True,"Да","Нет"), IIf([Паспорт]=True,"Да","Нет"), IIf([Протокол]=True,"Да","Нет")
ORDER BY Обращения.Номер_образца;



Таким образом значение "Осталось" я получал отдельно запросом. Но теперь, когда всё будет на SQL Server, а все запросы будет переделаны на запросы к серверу из Access, я не знаю, как быть. Ведь в SQL Server нельзя так просто сохранить запрос, если только в текстовом виде. Да и как записать результат запроса просуммированный в MySQL?

Задача стоит передо мной:
периодически заполнять новыми данными таблицу Autumn на связанном сервере MySQL значениями полей из таблиц SQL Server. Причём одно из полей (поле Осталось) раньше вычислялось отдельным запросом, в другом запросе суммировалось, а теперь как это реализовать - я не знаю.
Посему прошу помощи, идеи, как это реализовать, потому как сам я не представляю ввиду отсутствия всяческого опыта и массива знаний.

Изображение - http://i.imgur.com/keGjGTg.jpg
4 сен 14, 14:30    [16535156]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Никита Осенний
чего именно из перечисленного по ссылке вам не хватает?

А что именно из Рекомандаций вы выполнили ?
Ничего

Никита Осенний
Запрос в аксесе был такой:

А зачем нужен запрос в аксесе ?
Я вот понятия не имею, что такое аксес.
4 сен 14, 14:33    [16535182]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Никита Осенний
Member

Откуда:
Сообщений: 281
Glory,

select @@version

автор
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64) Jul 9 2008 14:17:44 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)


Я рассказываю вам, как всё есть сейчас. А как это реализовать на SQL Server я не знаю... От того и спрашиваю =_=
4 сен 14, 15:05    [16535418]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Никита Осенний
Я рассказываю вам, как всё есть сейчас.

Зачем ?

Никита Осенний
А как это реализовать на SQL Server я не знаю...

Написать нужные запросы.
Для удобства можете представить, что ваши таблицы находятся не на разных серверах, а на одном.
4 сен 14, 15:08    [16535444]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Никита Осенний
Member

Откуда:
Сообщений: 281
Glory,

хорошо, я напишу запрос. Сохраню его как текстовый документ. И что дальше? Как мне его вызвать в другом запросе?
4 сен 14, 15:09    [16535459]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Никита Осенний
хорошо, я напишу запрос. Сохраню его как текстовый документ. И что дальше? Как мне его вызвать в другом запросе?

Мда. Тяжелый случай.
Путем помещения текста одного запроса в текст другого запроса

Сообщение было отредактировано: 4 сен 14, 15:12
4 сен 14, 15:11    [16535475]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Никита Осенний
Member

Откуда:
Сообщений: 281
Glory,

я только с аксесом до сих пор и работал...


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

Представил. ПОлучается запрос:

INSERT INTO Table_1 ( Номер_образца, Имя, Отчество, Дата_поступления )
SELECT Обращения.Номер_образца, Клиент.Имя, Клиент.Отчество, Обращения.Дата_поступления
FROM Клиент INNER JOIN Обращения ON Клиент.ИД_Клиента = Обращения.ИД_Клиента;

Работает.

А вот этот запрос не работает. Пишет, что ошибки синтаксиса... В SQL Server нельзя использовать IIf ?

автор
SELECT Обращения.ИД_Обращения, IIf([Аллель]="-",1,0) AS Выражение1, Обращения.Дата_поступления
FROM Обращения INNER JOIN (Аллели INNER JOIN Заказанные_гены ON Аллели.ИД_Аллеля = Заказанные_гены.ИД_Аллеля) ON Обращения.ИД_Обращения = Заказанные_гены.ИД_Обращения
WHERE (((Обращения.Дата_поступления) Between Date() And Date()-150) AND ((Обращения.Готов)=No) AND ((Заказанные_гены.[Считать?])=Yes));


автор
Сообщение 102, уровень 15, состояние 1, строка 1
Неправильный синтаксис около конструкции "=".
Сообщение 102, уровень 15, состояние 1, строка 3
Неправильный синтаксис около конструкции "Обращения".
4 сен 14, 15:21    [16535587]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Никита Осенний
А вот этот запрос не работает. Пишет, что ошибки синтаксиса...

Потому что синтаксис надо соблюдать

Никита Осенний
В SQL Server нельзя использовать IIf ?

А вы примените свой излюбленный метод "Только не хелпом продукта воспользовался, а вообще." и узнаете
4 сен 14, 15:23    [16535620]     Ответить | Цитировать Сообщить модератору
 Re: Запросы к Связанному серверу MySQL через MS SQL Server.  [new]
Никита Осенний
Member

Откуда:
Сообщений: 281
Glory,

так. немного разобрался....

Сделал первый запрос. Только не смог создать условие на дату за послдение 150 дней с текущей даты. Не подскажете?

автор
SELECT Обращения.ИД_Обращения, Заказанные_гены.ИД_Аллеля, Аллели.Аллель, Обращения.Дата_поступления, Обращения.Готов, Заказанные_гены.[Считать?], Аллель =
CASE
WHEN Аллели.Аллель = '-' THEN '1'
ELSE '0'
END
FROM Обращения INNER JOIN (Аллели INNER JOIN Заказанные_гены ON Аллели.ИД_Аллеля = Заказанные_гены.ИД_Аллеля) ON Обращения.ИД_Обращения = Заказанные_гены.ИД_Обращения
WHERE (((Обращения.Готов)= '0' ) AND ((Заказанные_гены.[Считать?])='1'));
4 сен 14, 16:23    [16535994]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить