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

Откуда:
Сообщений: 135
Добрый день!


Сломала всю голову, не могу никак придумать, как передать параметр в OPENQUERY


CREATE PROCEDURE [dbo].[d_client_INSERT_UPDATE]
(@DATE_LAST_MNTD nvarchar(20))
as

DECLARE @client_mnem nvarchar(18), @CLIENT_LNAM nvarchar(105),
@CLIENT_FNAM nvarchar(105), @CLIENT_MNAM nvarchar(105), @DATE_LAST datetime

DECLARE d_client_cursor CURSOR FOR
select * from OPENQUERY(riskrep,'SELECT client_mnem,
client_lnam, client_fnam,client_mnam ,DATE_LAST_MNTD
from dwhinform.d_client where DATE_LAST_MNTD>='+@DATE_LAST_MNTD )

OPEN d_client_cursor
...

Ругается Line 11: Incorrect syntax near '+'.


Подскажите как передать параметр??
30 окт 08, 12:09    [6375338]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Dimais
Member

Откуда:
Сообщений: 227
В openquery нельзя передавать параметры (это для sqlsrv2000)
надо генерить строку целиком .... т.е.

declare @str varchar(8000)

select @str = 'select * from openquery (qwedf, ''select .... '')'
30 окт 08, 12:17    [6375409]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
lenysik
Member

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


я пробовала вот так
DECLARE @str nvarchar(18)
set @str = 'SELECT client_mnem,
client_lnam, client_fnam,client_mnam ,DATE_LAST_MNTD
from dwhinform.d_client where DATE_LAST_MNTD>='+@DATE_LAST_MNTD

DECLARE d_client_cursor CURSOR FOR
select * from OPENQUERY(riskrep,@str )


и у меня ругается :(
30 окт 08, 12:41    [6375623]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74928
2 lenysik

В чем необходимость именно OPENQUERY?
30 окт 08, 12:46    [6375655]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
lenysik
Member

Откуда:
Сообщений: 135
pkarklin
2 lenysik

В чем необходимость именно OPENQUERY?



Таблица dwhinform.d_client находится на ораклевам сервере и создан линк riskrep, вот для этого и OPENQUERY. А процедуру надо создать на SQL Server 2000
30 окт 08, 12:50    [6375678]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Dimais
Member

Откуда:
Сообщений: 227
Нельзя в openquery переменную передавать тоже !!!!
select * from openquery(qwefq, @str) - не канает ....

только .... так

select @str = '

select * into ##temptable from openquery(qef, 'select .........')

'

exec @str

select * from ##temptable
30 окт 08, 13:33    [6376054]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Glory
Member

Откуда:
Сообщений: 104751
lenysik
pkarklin
2 lenysik

В чем необходимость именно OPENQUERY?



Таблица dwhinform.d_client находится на ораклевам сервере и создан линк riskrep, вот для этого и OPENQUERY. А процедуру надо создать на SQL Server 2000

А с linked server можно не только в OPENQUERY работать. Но и прямой запрос написать
30 окт 08, 13:51    [6376193]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
lenysik
Member

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

спасибо, так хоть процедура выполнилась


А подскажите как еще побороть формат даты

В ORACLE формат даты '29-окт-2008'

В SQL Server передаю в процедуру
EXEC dbo.d_client_INSERT_UPDATE @DATE_LAST_MNTD='''29-окт-2008'''


В тексте запроса

select * from OPENQUERY(riskrep,'SELECT client_mnem,
client_lnam, client_fnam,client_mnam ,DATE_LAST_MNTD
from dwhinform.d_client where DATE_LAST_MNTD>=''29-окт-2008''')

Но данные возвращаются за все даты, а не >=''29-окт-2008'''
30 окт 08, 13:54    [6376227]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
lenysik
Member

Откуда:
Сообщений: 135
Glory
lenysik
pkarklin
2 lenysik

В чем необходимость именно OPENQUERY?



Таблица dwhinform.d_client находится на ораклевам сервере и создан линк riskrep, вот для этого и OPENQUERY. А процедуру надо создать на SQL Server 2000

А с linked server можно не только в OPENQUERY работать. Но и прямой запрос написать




А как написать прямой запрос?
30 окт 08, 14:00    [6376285]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Glory
Member

Откуда:
Сообщений: 104751
lenysik
Glory
lenysik
pkarklin
2 lenysik

В чем необходимость именно OPENQUERY?



Таблица dwhinform.d_client находится на ораклевам сервере и создан линк riskrep, вот для этого и OPENQUERY. А процедуру надо создать на SQL Server 2000

А с linked server можно не только в OPENQUERY работать. Но и прямой запрос написать




А как написать прямой запрос?

Ну как как
select * from mylinkedserver.mydatabase.myschema.mytable
30 окт 08, 14:03    [6376302]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
lenysik
Member

Откуда:
Сообщений: 135
Glory
lenysik
Glory
lenysik
pkarklin
2 lenysik

В чем необходимость именно OPENQUERY?



Таблица dwhinform.d_client находится на ораклевам сервере и создан линк riskrep, вот для этого и OPENQUERY. А процедуру надо создать на SQL Server 2000

А с linked server можно не только в OPENQUERY работать. Но и прямой запрос написать




А как написать прямой запрос?

Ну как как
select * from mylinkedserver.mydatabase.myschema.mytable



При выполнении

SELECT client_mnem,
client_lnam, client_fnam,client_mnam ,DATE_LAST_MNTD
from riskrep.riskrep.dwhinform.d_client where DATE_LAST_MNTD>='29-окт-2008'

Возникает ошибка

OLE DB error trace [Non-interface error].
Msg 7312, Level 16, State 1, Line 1
Invalid use of schema and/or catalog for OLE DB provider 'OraOLEDB.Oracle'. A four-part name was supplied, but the provider does not expose the necessary interfaces to use a catalog and/or schema.


А OPENQUERY работает нормально
30 окт 08, 14:16    [6376422]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Glory
Member

Откуда:
Сообщений: 104751
SELECT client_mnem,
client_lnam, client_fnam,client_mnam ,DATE_LAST_MNTD
from riskrep..dwhinform.d_client where DATE_LAST_MNTD>='29-окт-2008'
30 окт 08, 14:30    [6376516]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Dimais
Member

Откуда:
Сообщений: 227
Да можно и без openquery, но в этом варианте нельзя использовать хинты и прочие прелести
чужих источников данных !
30 окт 08, 15:25    [6376986]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
lenysik
Member

Откуда:
Сообщений: 135
Объявила переменную


set @sqlQ = 'select * from OPENQUERY(riskrep,''SELECT client_mnem,
client_lnam, client_fnam,client_mnam ,DATE_LAST_MNTD
from dwhinform.d_client where DATE_LAST_MNTD>='''+@DATE_LAST_MNTD +''''')'

DECLARE d_client_cursor CURSOR FOR
select @sqlQ


OPEN d_client_cursor


FETCH NEXT FROM d_client_cursor
INTO @client_mnem, @CLIENT_LNAM, @CLIENT_FNAM,@CLIENT_MNAM, @DATE_LAST


Но теперь возникает ошибка
Cursorfetch: The number of variables declared in the INTO list must match that of selected columns.


Как в курсоре выбрать все колонки из запроса???
30 окт 08, 16:31    [6377501]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Glory
Member

Откуда:
Сообщений: 104751
DECLARE d_client_cursor CURSOR FOR select @sqlQ - вы хотите сказать, что это у вас открывает курсор по запросу с linked server ?
30 окт 08, 16:34    [6377536]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
lenysik
Member

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

да, курсор из запроса на линкованный сервер
30 окт 08, 16:35    [6377549]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74928
автор
DECLARE d_client_cursor CURSOR FOR
select @sqlQ


Откуда такие фантазии в синтаксисе?! Нельзя использовать динамику напрямую в открытии курсора.
30 окт 08, 16:36    [6377550]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Glory
Member

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

да, курсор из запроса на линкованный сервер

Вы сначала выполнили бы просто select @sqlQ и посмотрели, какой набор вы получите
30 окт 08, 16:37    [6377560]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
lenysik
Member

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


а как мне тогда сделать?
30 окт 08, 16:37    [6377564]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
Glory
Member

Откуда:
Сообщений: 104751
lenysik
pkarklin,


а как мне тогда сделать?

А что вы стремитесь сделать ?
30 окт 08, 16:38    [6377571]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74928
lenysik
pkarklin,


а как мне тогда сделать?


Для начала попытаться отказаться от OPENQUERY и последовать совету Glory о запросе с four-part names.
30 окт 08, 16:40    [6377589]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
lenysik
Member

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


Не работает напрямую, я сама линк не создавала, но мне сказали что там определенные настройки, а с OPENQUERY работает
30 окт 08, 16:44    [6377617]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74928
lenysik
pkarklin,
Не работает напрямую


Покажите инструкцию, которая не работает у Вас на прямую, приведенную ошибку, имя инстанса оракл, имя схемы.
30 окт 08, 16:48    [6377646]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74928
автор
Invalid use of schema and/or catalog for OLE DB provider 'OraOLEDB.Oracle'. A four-part name was supplied, but the provider does not expose the necessary interfaces to use a catalog and/or schema.


Попросите админа перелинковать сервер с использованием провайдера от Microsoft.
30 окт 08, 16:49    [6377656]     Ответить | Цитировать Сообщить модератору
 Re: OPENQUERY и передача параметра  [new]
somebody
Member

Откуда: Москва
Сообщений: 708
pkarklin
Покажите инструкцию, которая не работает у Вас напрямую, приведенную ошибку, имя инстанса оракл, имя схемы.

Да простейший пример, если Numeric'и передавать, Вам придётся использовать оракловые cast'ы для указания точности, а в прямом запросе к серверу Вы их не сможете указать. Вот и OpenQuery. И другие проблемы бывают, например, связанные с 64-битностью.

pkarklin
Попросите админа перелинковать сервер с использованием провайдера от Microsoft.

Вот уж что вряд ли работать будет :)
Впрочем, ежели 32-битный SQL 2000 с древними 32-битными серверами Оракла...
31 окт 08, 11:12    [6380251]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить