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

Откуда:
Сообщений: 19
Доброй ночи!
Помогите с запросом, пдж. Я новичок, знакомлюсь только с SQL. Ситуация такая: есть подключенный связанный сервер MySql. Из него нужно заполнить данный в таблице, которая находится на сервере MS SQL Server .
Запросом
Select * from openquery (MYSQL, 'select * from cdr
where dstchannel=0 ')
просматриваю данные, которые мне нужны.

Создаю запрос insert into

use test_g
go

insert into CRMEV (CrmEv_DatBeg,CrmEv_KagTel)
Select * from openquery (MYSQL, 'select calldate,dst frome cdr
where dstchannel=0 ')
go

Тут появляется ошибка
Сообщение 7399, уровень 16, состояние 1, строка 1
Поставщик OLE DB "MSDASQL" для связанного сервера "MYSQL" сообщил об ошибке. Поставщик не предоставил данных об ошибке.
Сообщение 7350, уровень 16, состояние 2, строка 1
Не удалось получить сведения о столбце от поставщика OLE DB "MSDASQL" для связанного сервера "MYSQL".

Что я делаю не так? Синтаксис не правильный? или вообще нет возможности переносить данный по такому принципу? У поставщика MSDASQL на закладке свойсва параметры все добавлены. Заранее спасибо!
19 апр 15, 02:36    [17534952]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к серверу MS SQL Server через связанный сервер MySQL  [new]
anvg
Member

Откуда: СПб
Сообщений: 101
Доброе время суток
Просто ошибка синтаксиса во второй команде
Сравните первая
 from cdr

и вторая
 frome cdr
19 апр 15, 04:20    [17535097]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к серверу MS SQL Server через связанный сервер MySQL  [new]
tanya.avapu
Member

Откуда:
Сообщений: 19
anvg
Доброе время суток
Просто ошибка синтаксиса во второй команде
Сравните первая
 from cdr

и вторая
 frome cdr


Получилось, спасибо!
Возникла след. проблема)))
Усложнила запрос, необходимо заполнить еще одно значение в таблице, но оно задается фактическим значением

use test_g
go

insert into CRMEV (CrmEv_DatBeg,CrmEv_KagTel,CrmEv_TypRcd)
values
((Select * from openquery (MYSQL, 'select calldate from cdr
where dstchannel=0 ')),
(Select * from openquery (MYSQL, 'select dst from cdr
where dstchannel=0 ')),
'11')
go

То есть CrmEv_TypRcd должно присвоить значение 11.

В результате этого отчета выводит сообщение:
Сообщение 512, уровень 16, состояние 1, строка 1
Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.
Выполнение данной инструкции было прервано.

Пробую ввести значение с помощью Set:
insert into CRMEV (CrmEv_DatBeg,CrmEv_KagTel,CrmEv_TypRcd)
values
((Select * from openquery (MYSQL, 'select calldate from cdr
where dstchannel=0 ')),
(Select * from openquery (MYSQL, 'select dst from cdr
where dstchannel=0 ')),
(set CrmEv_TypRcd='11' )
go

Ругается на неправильный синтаксис:
Сообщение 156, уровень 15, состояние 1, строка 7
Неправильный синтаксис около ключевого слова "set".
Как правильно построить запрос в этом случае. Еще мне нужно будет доп. добавить условие на дату события, т.е. чтоб выбирало только CrmEv_DatBeg=текущую дату и если текущая дата-понедельник заполнение данных еще за выходные (2 предыдущих дня). Можно как-то это реализовать. Не знаю даже как грамотно построить условие с учетом последнего параметра.
19 апр 15, 09:10    [17535227]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к серверу MS SQL Server через связанный сервер MySQL  [new]
anvg
Member

Откуда: СПб
Сообщений: 101
Values () в одних скобках данные для одной строки, а у вас
 'select calldate,dst frome cdr
where dstchannel=0 '
возвращает не одну строку
А чем вам не подходит
Insert into CRMEV (CrmEv_DatBeg,CrmEv_KagTel,CrmEv_TypRcd)
    Select * from openquery (MYSQL, 'select calldate, dst, 11 As CrmEv_TypRcd from cdr
    where dstchannel=0 ')
go

tanya.avapu
Еще мне нужно будет доп. добавить условие на дату события, т.е. чтоб выбирало только CrmEv_DatBeg=текущую дату и если текущая дата-понедельник заполнение данных еще за выходные (2 предыдущих дня). Можно как-то это реализовать. Не знаю даже как грамотно построить условие с учетом последнего параметра.

Вы же данные вставляете из MySQL? В его запросе и надо фильтровать.
Where 
(
( (WeekDay(Now())= 0) And ((To_Days(Now()) - ToDays(calldate)) >= 2) ) Or 
( (WeekDay(Now()) > 0) And ((To_Days(Now()) - ToDays(calldate)) = 0) )
) And (dstchannel = 0)

В субботу, воскресенье запускаться не будет?
19 апр 15, 11:58    [17535401]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к серверу MS SQL Server через связанный сервер MySQL  [new]
tanya.avapu
Member

Откуда:
Сообщений: 19
anvg
Values () в одних скобках данные для одной строки, а у вас
 'select calldate,dst frome cdr
where dstchannel=0 '
возвращает не одну строку
А чем вам не подходит
Insert into CRMEV (CrmEv_DatBeg,CrmEv_KagTel,CrmEv_TypRcd)
    Select * from openquery (MYSQL, 'select calldate, dst, 11 As CrmEv_TypRcd from cdr
    where dstchannel=0 ')
go

tanya.avapu
Еще мне нужно будет доп. добавить условие на дату события, т.е. чтоб выбирало только CrmEv_DatBeg=текущую дату и если текущая дата-понедельник заполнение данных еще за выходные (2 предыдущих дня). Можно как-то это реализовать. Не знаю даже как грамотно построить условие с учетом последнего параметра.

Вы же данные вставляете из MySQL? В его запросе и надо фильтровать.
Where 
(
( (WeekDay(Now())= 0) And ((To_Days(Now()) - ToDays(calldate)) >= 2) ) Or 
( (WeekDay(Now()) > 0) And ((To_Days(Now()) - ToDays(calldate)) = 0) )
) And (dstchannel = 0)

В субботу, воскресенье запускаться не будет?

Все оказывается намного проще, а я усложняю и накручиваю...Спасибо за помощь! И да, в выходные запрос обрабатываться не будет, только в раб. дни недели. И к функции CURRENT_TIMESTAMP привязываться не надо. Буду пробовать!
19 апр 15, 12:53    [17535535]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к серверу MS SQL Server через связанный сервер MySQL  [new]
anvg
Member

Откуда: СПб
Сообщений: 101
Извиняюсь, у меня в фильтре ошибка
Исправьте
((To_Days(Now()) - ToDays(calldate)) >= 2) )

на
((To_Days(Now()) - ToDays(calldate)) <= 2) )
19 апр 15, 14:19    [17535825]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к серверу MS SQL Server через связанный сервер MySQL  [new]
tanya.avapu
Member

Откуда:
Сообщений: 19
anvg
Извиняюсь, у меня в фильтре ошибка
Исправьте
((To_Days(Now()) - ToDays(calldate)) >= 2) )

на
((To_Days(Now()) - ToDays(calldate)) <= 2) )

заметила, спасибо!
19 апр 15, 15:27    [17535933]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить