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

Откуда:
Сообщений: 110
Добрый день, друзья.

Подскажите, пжл, как правильно написать запрос. Задача вставлять данные в MySQL БД из MS SQL согласно условия.

declare @commentcontent nvarchar(max) = 'test2test2test2'
declare @contactid nvarchar(max) = '118'
insert openquery (MySQL, 'select commentcontent from vtiger_modcomments')
	values(@commentcontent)
--where related_to = @contactid


На where парсер ругается, поэтому я его закомментил. Нужно вставлять в столбец commentcontent значение @commentcontent, где contactid = @contactid
contactid - это столбец в таблице vtiger_modcomments

Если исполнять этот запрос в таком виде, то отображается ошибка:

Сообщение 7399, уровень 16, состояние 1, строка 3
Поставщик OLE DB "MSDASQL" для связанного сервера "MySQL" сообщил об ошибке. Поставщик сообщил о непредвиденном глобальном сбое.
Сообщение 7343, уровень 16, состояние 2, строка 3
Поставщик OLE DB "MSDASQL" для связанного сервера "MySQL" не может INSERT INTO таблицу "[MSDASQL]". Неизвестная ошибка поставщика.
Location:	 memilb.cpp:1617
Expression:	 (*ppilb)->m_cRef == 0
SPID:		 57
Process ID:	 1676


Подскажите, как правильно создать запрос?

Спасибо.
26 окт 15, 10:01    [18325449]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Прошу прощения тут ошибка
maksim.yugai
где contactid = @contactid
contactid - это столбец в таблице vtiger_modcomments


Вот так правильно:
related_to = @contactid
related_to - это столбец в таблице vtiger_modcomments
26 окт 15, 10:04    [18325467]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
Glory
Member

Откуда:
Сообщений: 104760
maksim.yugai
Нужно вставлять в столбец commentcontent значение @commentcontent, где contactid = @contactid
contactid - это столбец в таблице vtiger_modcomments

Вставлять в столбец - это UPDATE
26 окт 15, 10:32    [18325659]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Glory
maksim.yugai
Нужно вставлять в столбец commentcontent значение @commentcontent, где contactid = @contactid
contactid - это столбец в таблице vtiger_modcomments

Вставлять в столбец - это UPDATE


Да, точно.

declare @commentcontent nvarchar(max) = 'test2test2test2'
declare @contactid nvarchar(max) = '118'
update openquery (MySQL, 'select commentcontent from vtiger_modcomments where related_to = ''@contactid''')
set commentcontent = @commentcontent


Исполняется, но значение не изменяет. Пишет: (строк обработано 0)
26 окт 15, 10:47    [18325732]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
Glory
Member

Откуда:
Сообщений: 104760
maksim.yugai
Исполняется, но значение не изменяет. Пишет: (строк обработано 0)

Это значит, что 0 строк попадает под условие вашего update
26 окт 15, 10:49    [18325738]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Glory
maksim.yugai
Исполняется, но значение не изменяет. Пишет: (строк обработано 0)

Это значит, что 0 строк попадает под условие вашего update


Там есть одна строка, которая подпадает под это условие... По-крайней мере должна подпадать.

К сообщению приложен файл. Размер - 25Kb
26 окт 15, 10:58    [18325788]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
Glory
Member

Откуда:
Сообщений: 104760
maksim.yugai
Там есть одна строка, которая подпадает под это условие... По-крайней мере должна подпадать.

Картинка с другого сайта.

Разве этот тот же запрос, что и в update написан ?
26 окт 15, 10:59    [18325793]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Если поменять тип @contactid на int ситуация не меняется.
26 окт 15, 11:00    [18325794]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
Glory
Member

Откуда:
Сообщений: 104760
maksim.yugai
Если поменять тип @contactid на int ситуация не меняется.

Значит дело не в типе данных
26 окт 15, 11:00    [18325798]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Glory
maksim.yugai
Там есть одна строка, которая подпадает под это условие... По-крайней мере должна подпадать.

Картинка с другого сайта.

Разве этот тот же запрос, что и в update написан ?


А вот это условие верно написано?

where related_to = ''@contactid'''
26 окт 15, 11:05    [18325820]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
Glory
Member

Откуда:
Сообщений: 104760
maksim.yugai
Glory
пропущено...

Разве этот тот же запрос, что и в update написан ?


А вот это условие верно написано?

where related_to = ''@contactid'''

Вопрос был - почему у вас в update один запрос, а в проверочном select - другой ?
26 окт 15, 11:06    [18325823]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Glory
maksim.yugai
пропущено...


А вот это условие верно написано?

where related_to = ''@contactid'''

Вопрос был - почему у вас в update один запрос, а в проверочном select - другой ?


Вот запрос update. Селектом, я хотел показать, что в таблице есть строка, которая подпадает под условие.

К сообщению приложен файл. Размер - 38Kb
26 окт 15, 11:08    [18325832]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
Glory
Member

Откуда:
Сообщений: 104760
maksim.yugai
Вот запрос update. Селектом, я хотел показать, что в таблице есть строка, которая подпадает под условие.

Вы понимаете задаваемые вам вопросы ?
26 окт 15, 11:09    [18325839]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
maksim.yugai
Да, точно.

declare @commentcontent nvarchar(max) = 'test2test2test2'
declare @contactid nvarchar(max) = '118'
update openquery (MySQL, 'select commentcontent from vtiger_modcomments where related_to = ''@contactid''')
set commentcontent = @commentcontent



Исполняется, но значение не изменяет. Пишет: (строк обработано 0)
С чего вы решили, что в openquery будут волшебным образом передаваться значения параметров?

Попробуйте так:
declare @commentcontent nvarchar(max) = 'test2test2test2'
declare @contactid int = 118

exec('update vtiger_modcomments set commentcontent = ? where related_to = ?', @commentcontent, @contactid) at MySQL
26 окт 15, 11:13    [18325867]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Glory
maksim.yugai
Вот запрос update. Селектом, я хотел показать, что в таблице есть строка, которая подпадает под условие.

Вы понимаете задаваемые вам вопросы ?


Так, до этого момента я думал, что понимаю вопросы. Теперь сомневаюсь. Где не то сказал? Можешь еще раз вопрос задать. А то чет, я прогоняю, походу дела...
26 окт 15, 11:13    [18325868]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
Glory
Member

Откуда:
Сообщений: 104760
maksim.yugai
Glory
пропущено...

Вы понимаете задаваемые вам вопросы ?


Так, до этого момента я думал, что понимаю вопросы. Теперь сомневаюсь. Где не то сказал? Можешь еще раз вопрос задать. А то чет, я прогоняю, походу дела...

Почему для запроса
update openquery (MySQL, 'select commentcontent from vtiger_modcomments where related_to = ''@contactid''')
set commentcontent = @commentcontent

проверочный запрос у вас
select * from openquery (MySQL, 'select commentcontent from vtiger_modcomments ')

а не

select * from openquery (MySQL, 'select commentcontent from vtiger_modcomments where related_to = ''@contactid''')
26 окт 15, 11:14    [18325885]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Glory
maksim.yugai
пропущено...


Так, до этого момента я думал, что понимаю вопросы. Теперь сомневаюсь. Где не то сказал? Можешь еще раз вопрос задать. А то чет, я прогоняю, походу дела...

Почему для запроса
update openquery (MySQL, 'select commentcontent from vtiger_modcomments where related_to = ''@contactid''')
set commentcontent = @commentcontent

проверочный запрос у вас
select * from openquery (MySQL, 'select commentcontent from vtiger_modcomments ')

а не

select * from openquery (MySQL, 'select commentcontent from vtiger_modcomments where related_to = ''@contactid''')


Просто этот запрос не выдает ничего. Т.е., он не совсем правильный. Поэтому я спросил про where related_to = ''@contactid''. И решил просто показать, что строка, которую я хочу проапдейтить, имеется.
26 окт 15, 11:21    [18325920]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
invm
maksim.yugai
Да, точно.

declare @commentcontent nvarchar(max) = 'test2test2test2'
declare @contactid nvarchar(max) = '118'
update openquery (MySQL, 'select commentcontent from vtiger_modcomments where related_to = ''@contactid''')
set commentcontent = @commentcontent



Исполняется, но значение не изменяет. Пишет: (строк обработано 0)
С чего вы решили, что в openquery будут волшебным образом передаваться значения параметров?

Попробуйте так:
declare @commentcontent nvarchar(max) = 'test2test2test2'
declare @contactid int = 118

exec('update vtiger_modcomments set commentcontent = ? where related_to = ?', @commentcontent, @contactid) at MySQL


Вот так отработал.
26 окт 15, 11:22    [18325924]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
maksim.yugai
Member

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

Спасибо большое за помощь! Выручил.
26 окт 15, 11:27    [18325961]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
Glory
Member

Откуда:
Сообщений: 104760
maksim.yugai
Просто этот запрос не выдает ничего.

если select не выдает записи, то почему вдруг update должен найти какие-то записи

maksim.yugai
Т.е., он не совсем правильный.

Ну так напишите в MySQL правильный запрос

maksim.yugai
И решил просто показать, что строка, которую я хочу проапдейтить, имеется.

Вас не про это спрашивали
26 окт 15, 11:28    [18325976]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Прошу помочь еще раз в вопросе по insert в линкованную БД.

Есть таблица в БД MySQL table1. В ней имеется "уникальное" поле id типа int с pk ключом. Я делаю запрос для инсерта и вставляю туда строку. Все нормально.

Мне нужно генерить "уникальное" значение id и вставлять его туда. Какой функцией это можно делать? При этом поля будут добавляться несколькими пользователями. И изменить поле id на AUTO_INCREMENT нет возможности.

В голову приходит только - rand()*100000000000, но число некрасивое получается и уверен, что есть что-то еще.
insert openquery (MYSQL, '
	select 
		id, smcreatorid, smownerid, modifiedby, 
		setype, description, createdtime, 
		modifiedtime, viewedtime, status, 
		version, presence, deleted, label
	from table1')
values(....,1, 1, 1,  'Desk', 'details test6 insert with smss', GETDATE(), GETDATE(), null, null, 0, 1, 0, 'test6 insert with smss')


Заранее спасибо.
8 фев 16, 13:51    [18787379]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
Glory
Member

Откуда:
Сообщений: 104760
maksim.yugai
Мне нужно генерить "уникальное" значение id и вставлять его туда. Какой функцией это можно делать?

Вы хотите, чтобы MSSQL вам как-то сгенерировал число, уникальное в другой таблицы другого сервера ?
8 фев 16, 13:56    [18787426]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Glory,

да, этого он и хочет... :)

А есть ли в MySQL генераторы? Если есть, используй их. Если нет, находи максимальное значение и увеличивай на 1, что-то типа

select max(related_to)+1 from vtiger_modcomments


П.С.
А зачем ты с MySQL работаешь через MSSQL? У тебя что, вилки нет?
8 фев 16, 14:31    [18787754]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Шыфл
Glory,

да, этого он и хочет... :)

А есть ли в MySQL генераторы? Если есть, используй их. Если нет, находи максимальное значение и увеличивай на 1, что-то типа

select max(related_to)+1 from vtiger_modcomments


П.С.
А зачем ты с MySQL работаешь через MSSQL? У тебя что, вилки нет?


Спасибо. Да, наверное так и буду генерить новое значение.

Потому-то, один сервис работает на MSSQL, а другой на MySQL. И при событии в одном - должно появляться значение другом сервисе. Только и всего.
8 фев 16, 14:48    [18787896]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в OPENQUERY  [new]
maksim.yugai
Member

Откуда:
Сообщений: 110
Glory
maksim.yugai
Мне нужно генерить "уникальное" значение id и вставлять его туда. Какой функцией это можно делать?

Вы хотите, чтобы MSSQL вам как-то сгенерировал число, уникальное в другой таблицы другого сервера ?


Я думал, может есть что-то вроде newid() или еще что-то..
8 фев 16, 14:48    [18787904]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить