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

Откуда: СПб
Сообщений: 270
Всем добрый день!

В офицальной справке есть такой пример

UPDATE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles WHERE id = 101') 
SET name = 'ADifferentName';


Но это же не гибко, мы можем поменять значение только для одного и тогоже id.

Подскажите, есть варианты еще для использования openquery и update.

Чтобы можно было обновлять с учетом данных с вызываемого сервера.
27 окт 14, 12:28    [16763003]     Ответить | Цитировать Сообщить модератору
 Re: openquery и update  [new]
Glory
Member

Откуда:
Сообщений: 104751
Веткин Сергей
Но это же не гибко, мы можем поменять значение только для одного и тогоже id.

Ну так уберите WHERE id = 101
27 окт 14, 12:30    [16763015]     Ответить | Цитировать Сообщить модератору
 Re: openquery и update  [new]
vso
Member

Откуда: СПб
Сообщений: 270
Glory
Ну так уберите WHERE id = 101


т.е. такая конструкция будет работать

UPDATE OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles') AS T
SET name = 'ADifferentName'
FROM T INNER JOIN T1 ON T.ID = T1.ID


или должно быть так

UPDATE T
SET name = 'ADifferentName'
FROM OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles') AS T INNER JOIN T1 ON T.ID = T1.ID
27 окт 14, 12:34    [16763034]     Ответить | Цитировать Сообщить модератору
 Re: openquery и update  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31868
Веткин Сергей
одскажите, есть варианты еще для использования openquery и update.

UPDATE OPENQUERY (OracleSvr, 'SELECT id, name FROM joe.titles') 
SET name = 'ADifferentName'
WHERE id = 101;
27 окт 14, 12:35    [16763039]     Ответить | Цитировать Сообщить модератору
 Re: openquery и update  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31868
Веткин Сергей
Glory
Ну так уберите WHERE id = 101
или должно быть так
UPDATE T
SET name = 'ADifferentName'
FROM OPENQUERY (OracleSvr, 'SELECT name FROM joe.titles') AS T INNER JOIN T1 ON T.ID = T1.ID
Да.
27 окт 14, 12:36    [16763044]     Ответить | Цитировать Сообщить модератору
 Re: openquery и update  [new]
Glory
Member

Откуда:
Сообщений: 104751
Веткин Сергей
т.е. такая конструкция будет работать

Такая - нет. Потому что нарушает синтаксис
27 окт 14, 12:36    [16763048]     Ответить | Цитировать Сообщить модератору
 Re: openquery и update  [new]
vso
Member

Откуда: СПб
Сообщений: 270
Огромное спасибо!

Все работает.

P.S.
Странно чего это майкрософт не дал развернутых примеров как для INSERT.
27 окт 14, 13:57    [16763437]     Ответить | Цитировать Сообщить модератору
 Re: openquery и update  [new]
vso
Member

Откуда: СПб
Сообщений: 270
Подскажите, будет ли работать такая конструкции

UPDATE T
SET name = case when T.state = 1 then 'ADifferentName' else 0 end
FROM OPENQUERY (OracleSvr, 'SELECT id, name, case when A=B then 1 else 0 end as state FROM joe.titles') AS T INNER JOIN T1 ON T.ID = T1.ID


то что state получается путем вычисления ни чему не противоречит?

P.S. Конечно все это можно проверить экпериментально, но мне приходится действовать на рабочей базе...
28 окт 14, 12:26    [16767086]     Ответить | Цитировать Сообщить модератору
 Re: openquery и update  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8584
Веткин Сергей, слышали о временных таблицах?
28 окт 14, 12:45    [16767160]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить