rivera
14-05-2011, 11:36
День добрый.
Есть сервер А
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
Windows NT 5.2 <X64> (Build 3790: Service Pack 2)
к нему подключен линкованный сервер (СУБД ORACLE) с именем RS (remote server)
назовем сервер Б
определено представление (view) на сервера А
create view [VIEW] as
SELECT [Column] FROM OPENQUERY(RS, 'SELECT * FROM Exchange.To_EXEC')
запрос с сервера А
insert into [VIEW] (Column)
values ('UPDATE Exchange.HDR_TABLE SET CHECK_DATE = sysdate WHERE ExBilId = ''ЗНАЧЕНИЕ'' ')
выдает ошибку
OLE DB provider "OraOLEDB.Oracle" for linked server "RS" returned message "ORA-22816: unsupported feature with RETURNING clause".
Msg 7343, Level 16, State 2, Line 1
The OLE DB provider "OraOLEDB.Oracle" for linked server "RS" could not INSERT INTO table "[OraOLEDB.Oracle]".
Сам селект из удаленной БД работает отлично.
Где он взял оператор RETURNING (который в ошибке)?
что мешает?
(изначально сервер А был
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
Windows NT 5.2 (Build 3790: Service Pack 2)
и на нем все прекрасно работает)
------------------------------добавлено
забавно, если выполнить тот же insert, но без вьюхи
т.е. вместо
insert into [VIEW] (Column)
values ('tro-lo-lo')
вот это
insert OPENQUERY(RS, 'SELECT [Column] FROM Exchange.To_EXEC')
values ('tro-lo-lo')
то выдает другую ошибку
OLE DB provider "OraOLEDB.Oracle" for linked server "RS" returned message "ORA-00936: missing expression".
Msg 7321, Level 16, State 2, Line 1
An error occurred while preparing the query "SELECT [Column] FROM Exchange.To_EXEC" for execution against OLE DB provider "OraOLEDB.Oracle" for linked server "RS".
------------------------------добавлено2
разница в ошибках, зависит от того, указано ли имя колонки в OPENQUERY
т.е.
OPENQUERY(RS, 'SELECT [Column] FROM Exchange.To_EXEC') - ошибка пропущенной части кода (Msg 7321)
OPENQUERY(RS, 'SELECT * FROM Exchange.To_EXEC') - ошибка RETURNING (Msg 7343)
Есть сервер А
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
Windows NT 5.2 <X64> (Build 3790: Service Pack 2)
к нему подключен линкованный сервер (СУБД ORACLE) с именем RS (remote server)
назовем сервер Б
определено представление (view) на сервера А
create view [VIEW] as
SELECT [Column] FROM OPENQUERY(RS, 'SELECT * FROM Exchange.To_EXEC')
запрос с сервера А
insert into [VIEW] (Column)
values ('UPDATE Exchange.HDR_TABLE SET CHECK_DATE = sysdate WHERE ExBilId = ''ЗНАЧЕНИЕ'' ')
выдает ошибку
OLE DB provider "OraOLEDB.Oracle" for linked server "RS" returned message "ORA-22816: unsupported feature with RETURNING clause".
Msg 7343, Level 16, State 2, Line 1
The OLE DB provider "OraOLEDB.Oracle" for linked server "RS" could not INSERT INTO table "[OraOLEDB.Oracle]".
Сам селект из удаленной БД работает отлично.
Где он взял оператор RETURNING (который в ошибке)?
что мешает?
(изначально сервер А был
Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
Windows NT 5.2 (Build 3790: Service Pack 2)
и на нем все прекрасно работает)
------------------------------добавлено
забавно, если выполнить тот же insert, но без вьюхи
т.е. вместо
insert into [VIEW] (Column)
values ('tro-lo-lo')
вот это
insert OPENQUERY(RS, 'SELECT [Column] FROM Exchange.To_EXEC')
values ('tro-lo-lo')
то выдает другую ошибку
OLE DB provider "OraOLEDB.Oracle" for linked server "RS" returned message "ORA-00936: missing expression".
Msg 7321, Level 16, State 2, Line 1
An error occurred while preparing the query "SELECT [Column] FROM Exchange.To_EXEC" for execution against OLE DB provider "OraOLEDB.Oracle" for linked server "RS".
------------------------------добавлено2
разница в ошибках, зависит от того, указано ли имя колонки в OPENQUERY
т.е.
OPENQUERY(RS, 'SELECT [Column] FROM Exchange.To_EXEC') - ошибка пропущенной части кода (Msg 7321)
OPENQUERY(RS, 'SELECT * FROM Exchange.To_EXEC') - ошибка RETURNING (Msg 7343)