Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MySql linked server - не проходит update  [new]
ura
Member [заблокирован]

Откуда: Киев
Сообщений: 932
такой вот нехитрый код:
update p set PRICE=100-p.PRICE
from openquery(MySqlLinkedServer,'select * from PRODUCT') p
where p.PRODUCTID=12386

Ошибка:
OLE DB provider "MSDASQL" for linked server "...." returned message "Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени ее последнего чтения.".
Msg 7343, Level 16, State 4, Line 3
The OLE DB provider "MSDASQL" for linked server "...." could not UPDATE table "[MSDASQL]". The rowset was using optimistic concurrency and the value of a column has been changed after the containing row was last fetched or resynchronized.



поле PRICE в таблице PRODUCT - double
значение в нём 7.6. Если меняю на другое - код нормально отрабатывает.
Забавно то, что ошибка проявляется на всех записях, где PRICE=7.6.

Аналогичный апдейт из MySql клиента проходит нормально, так что проблема в драйвере. В настройках провайдера копался, но ничего путного не вышло. В настройках DSN тоже разные опции пробовал, и тут без особого результата. Может кто сталкивался ?

а, ну и:
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
Apr 2 2010 15:48:46
Copyright (c) Microsoft Corporation
Express Edition with Advanced Services (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2)

MySql версия 5.5
8 июл 11, 13:37    [10945283]     Ответить | Цитировать Сообщить модератору
 Re: MySql linked server - не проходит update  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
EXECUTE('update PRODUCT set PRICE=100-PRICE where PRODUCTID=12386') AT MySqlLinkedServer
8 июл 11, 13:45    [10945364]     Ответить | Цитировать Сообщить модератору
 Re: MySql linked server - не проходит update  [new]
ura
Member [заблокирован]

Откуда: Киев
Сообщений: 932
pkarklin
EXECUTE('update PRODUCT set PRICE=100-PRICE where PRODUCTID=12386') AT MySqlLinkedServer

Дело в том, что приведённый мной код предельно упрощён для понимания ситуации.
В реальности используются таблицы из MSSQL
8 июл 11, 13:53    [10945425]     Ответить | Цитировать Сообщить модератору
 Re: MySql linked server - не проходит update  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
ura,

Напишите курсор.
8 июл 11, 13:58    [10945470]     Ответить | Цитировать Сообщить модератору
 Re: MySql linked server - не проходит update  [new]
ura
Member [заблокирован]

Откуда: Киев
Сообщений: 932
pkarklin,

очень не хотелось бы, каналы связи не шибко быстрые, по быстродействию не уложусь
хотя, если не будет других вариантов - таки придётся
8 июл 11, 14:05    [10945544]     Ответить | Цитировать Сообщить модератору
 Re: MySql linked server - не проходит update  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
ura,

А Вы полагаете, что если напишите на стороне MS SQL один запрос на UPDATE прилинкованной таблицы, то MS SQL, выступая в данном случае клиентом к MySQL, будет использовать нечто магическое, а не

'update PRODUCT set PRICE=100-PRICE where PRODUCTID=12386'

для каждой записи?!
8 июл 11, 14:13    [10945636]     Ответить | Цитировать Сообщить модератору
 Re: MySql linked server - не проходит update  [new]
Geep
Member

Откуда: Москва
Сообщений: 975
Может лучше так?...

{ EXEC | EXECUTE }
( { @string_variable | [ N ] 'command_string [ ? ] ' } [ + ...n ]
[ { , { value | @variable [ OUTPUT ] } } [ ...n ] ]
)
[ AS { LOGIN | USER } = ' name ' ]
[ AT linked_server_name ]
[;]
8 июл 11, 14:18    [10945696]     Ответить | Цитировать Сообщить модератору
 Re: MySql linked server - не проходит update  [new]
ura
Member [заблокирован]

Откуда: Киев
Сообщений: 932
pkarklin,

Я думаю, что очень много времени уйдёт только на обращение к MySql
Каждый вызов execute - инициализация подключения, авторизация
8 июл 11, 14:19    [10945715]     Ответить | Цитировать Сообщить модератору
 Re: MySql linked server - не проходит update  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
ura,

Вы, уж, покажите, оригинальный запрос...

автор
Каждый вызов execute - инициализация подключения, авторизация


Не переживайте, пул коннектов всегда рулит.
8 июл 11, 14:21    [10945732]     Ответить | Цитировать Сообщить модератору
 Re: MySql linked server - не проходит update  [new]
ura
Member [заблокирован]

Откуда: Киев
Сообщений: 932
pkarklin,

оригинальных запросов много, не вижу смысла их приводить
ваш workaround принимается, если не будет найдено другого решения
8 июл 11, 14:26    [10945785]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить