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

Откуда:
Сообщений: 35
Подскажите пожалуйста , у меня есть проблема с Linkserver в MSSQL
при запуске Update у меня происходит Update всей таблицы на стороне MySQL
вместо только определенных полей которые находятся в временной таблице.

CREATE TABLE #tblTemp
(
i1 INT
)

INSERT INTO #tblTemp (i1) VALUES (203)

UPDATE OPENQUERY ([QA_MYSQL] , 'Select * From test.tblTest')
SET Test = 'ddddd'
FROM #tblTemp,OPENQUERY ([QA_MYSQL] , 'Select * From test.tblTest') dest
WHERE #tblTemp.i1 = dest.Ind

В чем может быть проблема ?
18 дек 13, 15:32    [15312143]     Ответить | Цитировать Сообщить модератору
 Re: проблема с MSSQL - > MySQL  [new]
o-o
Guest
kogany,

какой-то косяк OPENQUERY.
т.е. воспроизвожу ситуацию на прилинкованном сервере (SQL Server) -- [GC0050V7\GREECE]

CREATE TABLE #tblTemp
(
i1 INT
)

INSERT INTO #tblTemp (i1) VALUES (1000)

UPDATE [GC0050V7\GREECE].aero.dbo.Company1
SET name = '2000'
FROM #tblTemp, [GC0050V7\GREECE].aero.dbo.Company1 dest
WHERE #tblTemp.i1 = dest.id_comp
-----------------------------------------------------------
(1 row(s) affected)

UPDATE OPENQUERY ([GC0050V7\GREECE] , 'Select * From aero.dbo.Company1')
SET name = '2000'
FROM #tblTemp,OPENQUERY ([GC0050V7\GREECE] , 'Select * From aero.dbo.Company1') dest
WHERE #tblTemp.i1 = dest.id_comp
----------------------------------------------------------
(6 row(s) affected)

UPDATE OPENQUERY ([GC0050V7\GREECE] , 'Select * From aero.dbo.Company1 where id_comp = 1000')
SET name = '2000'
FROM #tblTemp, [GC0050V7\GREECE].aero.dbo.Company1  dest
WHERE #tblTemp.i1 = dest.id_comp
-----------------------------------------------------------
(1 row(s) affected)


профайлер на линке показывает, что он открывает курсор по всему, что в OPENQUERY,
поэтому надо ограничивать его как у меня в последнем куске кода
18 дек 13, 19:30    [15313628]     Ответить | Цитировать Сообщить модератору
 Re: проблема с MSSQL - > MySQL  [new]
o-o
Guest
усложняем себе жизнь и соединяем с таблицей с двумя значениями
(оба присутствуют в обновляемой таблице):
CREATE TABLE #tblTemp
(
i1 INT, val varchar(10)
)

INSERT INTO #tblTemp (i1, val) 
VALUES (1000, '1000'), (1, '1')

UPDATE OPENQUERY ([GC0050V7\GREECE] , 'Select * From aero.dbo.Company1')
SET name = val
FROM #tblTemp,
     OPENQUERY ([GC0050V7\GREECE] , 'Select * From aero.dbo.Company1') dest
WHERE #tblTemp.i1 = dest.id_comp

каким из них он проапдэйтит?
ответ: "как бог на душу положит".

у меня "вторым" проапдэйтил, все получили "1"

----------------------------------------------
тогда делаем еще круче:
во временную таблицу кладем то, чего заведомо нет в обновляемой.
проверяем, обновит-ли снова всех?
нет!
(0 row(s) affected)
18 дек 13, 19:45    [15313673]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить