Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
2viper2viper Member Откуда: Сообщений: 271 |
Может кто подскажет К SQL Server прилинкован MySQL Выполняю запрос update openquery (MYSQL_, 'select note from work') SET note=REPLACE(note,char(10), '') Возникает ошибка: Поставщик OLE DB "MSDASQL" для связанного сервера "MYSQL_" вернул сообщение "Не удается найти строку для обновления. Некоторые значения могли быть изменены со времени ее последнего чтения.". Сообщение 7343, уровень 16, состояние 4, строка 1 Поставщик OLE DB "MSDASQL" для связанного сервера "MYSQL_" не может UPDATE таблицу "[MSDASQL]". В наборе строк использовался принцип оптимистичного параллелизма, и значение столбца было изменено после последней выборки или повторной синхронизации содержащей его строки. При этом копирую этот массив в таблицу на MSSQL, выполняю: UPDATE [work] set note = REPLACE(note,char(10), ' ') go Запрос выполняется правильно, и без ошибок В чем может быть проблема при выполнении аналогичного запроса в таблице на прилинкованом MySQL? |
24 июл 15, 13:34 [17929852] Ответить | Цитировать Сообщить модератору |
KRS544 Member Откуда: Сообщений: 497 |
попробуйте exec ('update work set .....') at MYSQL_ |
24 июл 15, 13:50 [17929970] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
Посик по форуму ,Карл , поиск |
24 июл 15, 13:51 [17929980] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
Посик по форуму ,Карл , поиск |
24 июл 15, 13:52 [17929987] Ответить | Цитировать Сообщить модератору |
2viper2viper Member Откуда: Сообщений: 271 |
к сожалению, не помогло |
||
26 июл 15, 17:37 [17935781] Ответить | Цитировать Сообщить модератору |
2viper2viper Member Откуда: Сообщений: 271 |
Maxx, спасибо за варианты поиска по форуму. Я смотрел до создания темы. Там примеры на присвоения значения с использованием либо временной, либо постоянной таблицы здесь здесь и здесь Мне нужно не присвоить значение по ссылке на существующий массив (поэтому прикрутить временную наверное не получится), а удалить символ char(10) из этой же таблицы. Может кто подскажет как это реализовать через OPENQUERY, буду благодарен.. |
26 июл 15, 17:43 [17935791] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Создайте PK для таблицы work |
||
27 июл 15, 09:44 [17937625] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8485 |
2viper2viper, если прилинкован, то зачем openquery? |
27 июл 15, 12:51 [17938691] Ответить | Цитировать Сообщить модератору |
2viper2viper Member Откуда: Сообщений: 271 |
|
||
27 июл 15, 17:40 [17940891] Ответить | Цитировать Сообщить модератору |
2viper2viper Member Откуда: Сообщений: 271 |
Glory, он там есть. При чем select * from openquery (...) работает без проблем |
||||
27 июл 15, 17:44 [17940919] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
А MSSQL об этом знает ?
Потому, что для выброки не нужны ни ПК ни вообще какие-то индексы. Потому что выборке в отличии от обновления, не нужно точно позиционировать каждую запись |
||||
28 июл 15, 09:44 [17943514] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
Vadnet Member Откуда: Сообщений: 2 |
Прошу прощения, что поднял столь старую тему. Возникает точно такая же ошибка как у ТС в 2015 году. Выполняю запрос с курсором (с таблицами msq sql всегда отрабатывает): DECLARE @TSQL varchar(8000), @VAR char(10), @VAR2 char(10), @VAR3 VarChar(200), @VAR4 VarChar(10), @VAR5 VarChar(10), @VAR6 VarChar(20) DECLARE @Grup VarChar(10) DECLARE @Nnum VarChar(10) DECLARE @Name VarChar(200) DECLARE @Ed VarChar(10) DECLARE @koltek int DECLARE @temp VarChar(20) declare @cur cursor set @cur = cursor fast_forward for SELECT id_grup, nnum, name, ed, koltek, temp FROM table1 OPEN @cur WHILE (0 = 0) BEGIN FETCH NEXT FROM @cur INTO @Grup, @Nnum, @Name, @Ed, @koltek, @temp IF (@@FETCH_STATUS <> 0) BREAK SELECT @VAR = @Grup SELECT @VAR2 = @Nnum SELECT @VAR3 = @Name SELECT @VAR4 = @Ed SELECT @VAR5 = @koltek SELECT @VAR6 = @temp SELECT @TSQL = 'update OPENQUERY(mysql,''SELECT * FROM table2 WHERE id_grup = ''''' + @VAR + ''''' and nnum = ''''' + @VAR2 + ''''''') SET name = ''' + @VAR3 + ''', ed = ''' + @VAR4 + ''', koltek = ''' + @VAR5 + ''', temp = ''' + @VAR6 + ''' WHERE (id_grup = ''' + @VAR + ''') AND (nnum = ''' + @VAR2 + ''')' EXEC (@TSQL) END CLOSE @cur DEALLOCATE @cur И снова лезет данная message: "В наборе строк использовался принцип оптимистичного параллелизма, и значение столбца было изменено после последней выборки или повторной синхронизации содержащей его строки." PK присутствует, id_grup + nnum = уникальны в связке, если делать апдейт на одну строку, то он отрабатывает. Тыкните носом нуба что не так? С mysql только-только начинаю пытаться дружить. |
29 ноя 16, 15:12 [19947540] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Vadnet, https://technet.microsoft.com/ru-ru/library/ms191493(v=sql.105).aspx |
29 ноя 16, 15:21 [19947610] Ответить | Цитировать Сообщить модератору |
Vadnet Member Откуда: Сообщений: 2 |
TaPaK, thanks |
30 ноя 16, 14:02 [19951421] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |