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

Откуда:
Сообщений: 5
Привет всем, не очень разбираюсь в sql. Помогите плиз составить запрос

Делаю запрос через OPENROWSET без условий where, всё отрабатывает корректно :

SELECT * FROM OPENROWSET('MSDAORA','data source';'user id';'user pass',
'select * from schema.table_name');

Но если делаю запрос с условием, мне приходиться ставить дополнительные символы ' для условия, тогда выходит ошибка

SELECT * FROM OPENROWSET('MSDAORA','data source';'user id';'user pass',
'''select * from schema.table_name
where t.fieldname ''2013-03-05 18:39'' and ''2013-03-06 18:39''');

Msg 7357, Level 16, State 2, Line 1
Не удалось обработать объект "'schema.table_name
where t.fieldname between '2013-03-05 18:39' and '2013-03-06 18:39'
". Поставщик OLE DB "MSDAORA" для связанного сервера "(null)" обнаружил,
что у объекта либо нет ни одного столбца,
либо текущий пользователь не имеет разрешения на доступ к объекту.


Помогите плиз как верно поставить условие с переменными? сори может глупый вопрос.

версия ms sql

Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) Oct 14 2005 00:33:37 Copyright (c) 1988-2005 Microsoft Corporation Express Edition on Windows NT 6.1 (Build 7601: Service Pack 1)
4 апр 13, 09:02    [14133751]     Ответить | Цитировать Сообщить модератору
 Re: запрос с условием OPENROWSET  [new]
Glory
Member

Откуда:
Сообщений: 104760
new_login
Помогите плиз как верно поставить условие с переменными?

Узнать, как Oracle конвертирует строки в даты.
Ведь запрос внутри OPENROWSET должен соответствовать синтаксису Оракла.
4 апр 13, 09:16    [14133798]     Ответить | Цитировать Сообщить модератору
 Re: запрос с условием OPENROWSET  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
new_login
SELECT * FROM OPENROWSET('MSDAORA','data source';'user id';'user pass',
'''select * from schema.table_name
where t.fieldname ''2013-03-05 18:39'' and ''2013-03-06 18:39''');
:)
А кто BETWEEN в условии писать будет?

И, по поводу предложенного 14133798 относительно преобразования дат можно как-то примерно так:
1) to_date('20130404 12:00:45', 'YYYYMMDD HH24:mi:ss')
2) to_date('20130404120045', 'YYYYMMDDHH24miss')
4 апр 13, 10:16    [14134053]     Ответить | Цитировать Сообщить модератору
 Re: запрос с условием OPENROWSET  [new]
new_login
Member

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

between там есть ) просто забыл указать в примере извените.

Извените за дизинформацию это не таблица, а вьюшка. в самом оракле такой вот селект работает

select * from schema.view t
where t."field1" between '05-03-2013 18:39' and '06-03-2013 18:39'

но в ms sql такой же селект не хочет :

SELECT * FROM OPENROWSET('MSDAORA','data source';'user id';'user pass',
'''select * from schema.view
where t."field1" between ''2013-03-05 18:39'' and ''2013-03-06 18:39''');

выходит та же ошибка.
4 апр 13, 10:36    [14134197]     Ответить | Цитировать Сообщить модератору
 Re: запрос с условием OPENROWSET  [new]
new_login
Member

Откуда:
Сообщений: 5
всем спасибо, сделал селект через dblink

select * from DBLINK_Name..schema.view t
where t."field1" between '05-03-2013 18:39' and '06-03-2013 18:39'
4 апр 13, 10:43    [14134243]     Ответить | Цитировать Сообщить модератору
 Re: запрос с условием OPENROWSET  [new]
Glory
Member

Откуда:
Сообщений: 104760
new_login
но в ms sql такой же селект не хочет :

Еще раз
Запрос внутри OPENROWSET работает не в ms sql, а на линкед сервере.
Кроме того, читайте сообщение об ошибке - оно же на русском

"что у объекта либо нет ни одного столбца, либо текущий пользователь не имеет разрешения на доступ к объекту"
4 апр 13, 10:45    [14134254]     Ответить | Цитировать Сообщить модератору
 Re: запрос с условием OPENROWSET  [new]
Гость333
Member

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

Мда, фантастика... Сходите лучше на сайт Оракла и почитайте там про функцию to_date, параметр сессии NLS_DATE_FORMAT и т.п.
4 апр 13, 10:47    [14134270]     Ответить | Цитировать Сообщить модератору
 Re: запрос с условием OPENROWSET  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
new_login
но в ms sql такой же селект не хочет :

SELECT * FROM OPENROWSET('MSDAORA','data source';'user id';'user pass',
'''select * from schema.view
where t."field1" between ''2013-03-05 18:39'' and ''2013-03-06 18:39''');

выходит та же ошибка.

new_login
сделал селект через dblink

select * from DBLINK_Name..schema.view t
where t."field1" between '05-03-2013 18:39' and '06-03-2013 18:39'

Пользователь из первого запроса и пользователь линк-сервера, возможно, разные.
Соотвественно, с разными правами на SELECT из представления на ORACLE.
4 апр 13, 10:53    [14134307]     Ответить | Цитировать Сообщить модератору
 Re: запрос с условием OPENROWSET  [new]
Phantasmogory
Member

Откуда:
Сообщений: 13
Сделайте Print '''select * from schema.view
where t."field1" between ''2013-03-05 18:39'' and ''2013-03-06 18:39'''
У вас возможно путанница с экранированием кавычек. Вот первые две кавычки явно лишние
5 апр 13, 12:56    [14139876]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить