|
получение рекордсета от DB2-procedure на SQL Server
|
|||
---|---|---|---|
#18+
Поможите, люди добрые! (копия вопля из ветки MS SQL) Есть MS SQL 2000, есть linked server (AS/400 DB2), нужно с него данные получать. раньше получали так: EXEC sp_executesql N' INSERT INTO #MsTable SELECT * FROM OPENQUERY ( LinkedDB2 , ''SELECT * FROM DB2TABLE'') ' И всё прекрасно работало. Теперь вместо таблицы на сервере DB2 есть процедура, возвращающая рекордсет. НО: ежели мы напишем EXEC sp_executesql N' INSERT INTO #MsTable SELECT * FROM OPENQUERY ( LinkedDB2 , ''CALL DB2PROCEDURE(''DB2TABLE'')'') ' то нам скажут: "The OLE DB provider ['MSDASQL'|'IBMDA400'-пробовал и через OLEDB и через ODBC] indicates that the object has no columns." (А сама процедура действительно рекордсет возвращает - например Access из того же источника прекрасно его отображает) Как быть? Как данные получить? P.S. В М$ на этот счет есть даже Microsoft Knowledge Base Article - 297368 (http://support.microsoft.com/default.aspx?scid=kb;en-us;297368), где эта бяка описывается, и вот причина: "OpenQuery needs metadata about the columns at compile time. To retrieve the metadata, OpenQuery makes OLE DB calls which eventually execute the query with the SET FMTONLY ON option. As a result, OpenQuery fails to execute. Because of this behavior, queries that do not return metadata about columns, such as SQL Server stored procedures, cannot be run by using OpenQuery." Похоже, что DB2-процедура никаких метаданных о полях не возвращает, ибо вообще может возвращать рекордсеты с различным набором полей в зависимости от входных параметров, и посему бессмысленно пытаться что-то определить о её возврате в "compile time". ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2003, 09:44 |
|
получение рекордсета от DB2-procedure на SQL Server
|
|||
---|---|---|---|
#18+
>Похоже, что DB2-процедура никаких метаданных о полях не возвращает возвращает >ибо вообще может возвращать рекордсеты с различным набором полей в зависимости от входных параметров, абсолютно верно и посему бессмысленно пытаться что-то определить о её возврате в "compile time и это тоже абсолютно верно ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2003, 10:27 |
|
получение рекордсета от DB2-procedure на SQL Server
|
|||
---|---|---|---|
#18+
>Похоже, что DB2-процедура никаких метаданных о полях не возвращает возвращает >ибо вообще может возвращать рекордсеты с различным набором полей в зависимости от входных параметров, абсолютно верно и посему бессмысленно пытаться что-то определить о её возврате в "compile time и это тоже абсолютно верно ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2003, 10:27 |
|
получение рекордсета от DB2-procedure на SQL Server
|
|||
---|---|---|---|
#18+
к тому же она может возвратить несколько рекодсетов, опять-таки кол-во рекордсетов может зависить от параметров :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2003, 10:33 |
|
получение рекордсета от DB2-procedure на SQL Server
|
|||
---|---|---|---|
#18+
>NewYear: >возвращает Т.е. если я понял, ASка адекватно отрабатывает запросы по вызову процедур с выставленным SET FMTONLY ON ? Так почему СклСервак ничего не видит? (при том, что аналогичный финт, если источником является другой SQL-сервак, работает за милую душу) Как получить рекордсет? Кто-нть занимался репликацией из DB2 на SqlServer с участием процедур? Как вы это делали? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2003, 11:07 |
|
получение рекордсета от DB2-procedure на SQL Server
|
|||
---|---|---|---|
#18+
я не знаю, что такое SET FMTONLY ON метаданные можно получить через describe into, например. >Так почему СклСервак ничего не видит? энто уже не ко мне :) про СклСервак почти ничего не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2003, 11:15 |
|
получение рекордсета от DB2-procedure на SQL Server
|
|||
---|---|---|---|
#18+
Если хотите делать распределенные запросы которые будут оптимизороваться DB2 оптимизатором Велькам то DB2 Information Integrator. Так же может делать репликацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2003, 11:29 |
|
получение рекордсета от DB2-procedure на SQL Server
|
|||
---|---|---|---|
#18+
Нет, я не хочу делать распределенных запросов. Мне нужно просто среплицировать данные из DB2 при условии, что мне разрешено обращаться только к процедуре-аксессору (работающую с авторизацией *OWNER), а вот ни к 1 таблице или вьюшке доступа нет. P.S. Тут попробовал такую штуку: Поставил прокладку между DB2 и MSSQL: В базе MS Access сделал запрос на DB2 (вызов ентой процедуры), а затем, прописав эту базу, как ODBC-источник, сделал на SQL-сервере SELECT из неё. Рекордсет был получен! Как ни в чем не бывало! А напрямую-то почему не работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2003, 13:00 |
|
получение рекордсета от DB2-procedure на SQL Server
|
|||
---|---|---|---|
#18+
Как я тебя понимаю! Мы сами мучаемся с доступом через СП-шки. Первый раз были мучения - доступ дали даже не к самой дб2, а к MS SQL, на котормо работала расширенная хранимка, которая обращалась к дб2. Проблему получения данных и помещения их в таблицу решили через DTS с написанием простенькой процедурки маппинга на VB. Второй раз - надо на локальной DB2 получить табличный набор из результата работы процедуры на удаленном сервере DB2, а дб2 не умеет коннектиться из хранимок на удаленные сервера, не позволяет создавать federated хранимки и вообще не считает результаты работы своих процедур табличными объектами (буду рад услышать, что все это не так). :( Сейчас проблема решается так - есть хранимка, которая запускает отдельный екзешник, от которого и получает информацию. Правда пока не получает - отчего-то ODBC у меня отказывается выполнять запросы по вызову процедур с параметрами (вызов процедур без параметра или запросы без процедур выполняются). Пока боремся. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2005, 19:30 |
|
|
start [/forum/topic.php?fid=43&msg=32871051&tid=1606037]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 20ms |
total: | 159ms |
0 / 0 |