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

ВЫПОЛНЯЕТСЯ:


select *
from
OPENROWSET('MSDASQL',
'DRIVER={SQL Server};SERVER=<Сервер>;UID=<Логин>;PWD=<Пароль>',
' set dateformat dmy
declare @date_n datetime, @date_k datetime
select @date_n=''20040101'',@date_k=''20041201''

SELECT *, N=DATEDIFF(day,START_DATE,END_OPER_DATE) FROM

(SELECT MH.DIV_ID,MHT.ID,MHT.THREAD_NO,MHT.OPEN_DATE,MHT.CLOSE_DATE,MH.RECORD_NO,MH.OPER_DATE,
CASE
WHEN MH.OPER_DATE>@date_n THEN (SELECT MH.OPER_DATE)
ELSE @date_n
END AS START_DATE
,(SELECT MH2.OPER_DATE
FROM MULTIPROF_HIST MH2
WHERE MH2.THREAD_NO=MHT.THREAD_NO
and MH2.BU_ID=MHT.BU_ID
and MH2.LIST_ID=MHT.LIST_ID
and MH2.ID=MHT.ID
AND MH2.RECORD_NO=MH.RECORD_NO+1) AS CLOSE_D,
CASE

.......... и т.д.


выдается ошибка:

Could not process object ' set dateformat dmy
declare @date_n datetime, @date_k datetime
select @date_n='20040101',@date_k='20041201' и т.д. текст запроса

Если объявлять не внутри OPENROWSET, а снаружи также выдается ошибка, что переменные нужно объявить
21 дек 04, 09:36    [1195472]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А если в скрипте просто без объявления переменных подставить их значения в запрос?
21 дек 04, 10:12    [1195560]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
а если пользовать linkedserver? :)
21 дек 04, 10:42    [1195653]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
Алена Б.
Guest
tpg
А если в скрипте просто без объявления переменных подставить их значения в запрос?


Это конечно запросто, но дело в том, что это только отладка на реальных датах, при выполнении вызове запроса в Delphi туда будет передаваться некоторый параметр :))
22 дек 04, 08:45    [1198610]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
Алена Б.
Guest
buser
а если пользовать linkedserver? :)


если честно, ни разу с этим не работала, везде использую OPENROWSET.
22 дек 04, 08:48    [1198614]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
Алена Б.
Guest
НУ ПРОСТО НЕ МОЖЕТ ТАКОГО БЫТЬ чтобы нельзя было объявить внутри переменные, это же самое главное...
ДАЖЕ СПРОСИТЬ НЕ У КОГО
22 дек 04, 08:49    [1198616]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
BOL: OPENROWSET ...OPENROWSET does not accept variables for its arguments...
Вам правельно посоветовал buser перейти на linkedserver или используйте динамический SQL
22 дек 04, 09:03    [1198630]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
Алена Б.
Guest
VladRUS.ca
BOL: OPENROWSET ...OPENROWSET does not accept variables for its arguments...
Вам правельно посоветовал buser перейти на linkedserver или используйте динамический SQL


но переменные можно объявить и не внутри OPENROWSET, а снаружи.
Может быть можно как-то разбить строку OPENROWSET на фрагменты, обратиться к переменным, получить данные, которые записаны в них, а затем все вместе объеденить ...
и через EXEC
22 дек 04, 09:18    [1198654]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
Алена Б.
VladRUS.ca
BOL: OPENROWSET ...OPENROWSET does not accept variables for its arguments...
Вам правельно посоветовал buser перейти на linkedserver или используйте динамический SQL


но переменные можно объявить и не внутри OPENROWSET, а снаружи.
Может быть можно как-то разбить строку OPENROWSET на фрагменты, обратиться к переменным, получить данные, которые записаны в них, а затем все вместе объеденить ...
и через EXEC

Так это и есть динамический SQL
22 дек 04, 09:21    [1198661]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
Алена Б.
Guest
слышала, что linkedserver может глючить
22 дек 04, 09:25    [1198675]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
Алена Б.
слышала, что linkedserver может глючить

Я использую его в реальных проектах довольно интенсивно - пока проблем нет (стучю по дереву)
22 дек 04, 09:30    [1198683]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
Алена Б.
Guest
Мне в теории понятно как можно, но берусь писать ничего не работает, может быть у кого-нибудь есть подобный пример?
22 дек 04, 09:31    [1198686]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
Алена Б.
Guest
Форма записи примерно такая?

автор
sp_addlinkedserver @server = N'LinkServer',
@srvproduct = N' ',
@provider = N'SQLOLEDB',
@datasrc = N'ServerNetName',
@catalog = N'Northwind'
GO
SELECT *
FROM LinkServer.Northwind..Shippers
22 дек 04, 09:34    [1198698]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
Алена Б.
Форма записи примерно такая?

автор
sp_addlinkedserver @server = N'LinkServer',
@srvproduct = N' ',
@provider = N'SQLOLEDB',
@datasrc = N'ServerNetName',
@catalog = N'Northwind'
GO
SELECT *
FROM LinkServer.Northwind..Shippers


-- Create LinkServer
EXEC sp_addlinkedserver
    'LinkServer', 
    '', 
    'SQLOLEDB',
    NULL,
    NULL,
    'DRIVER={SQL Server};SERVER=<SERVER NAME>;'

EXEC sp_addlinkedsrvlogin 'LinkServer', 'false', 'sa', 'sa', '<PASSWORD>'

-- Delete LinkServer
EXEC sp_droplinkedsrvlogin 'LinkServer' , 'sa'
EXEC sp_dropserver @server = 'LinkServer' 

Замените <SERVER NAME> на свой сервер и <PASSWORD> на пароль sa
22 дек 04, 09:41    [1198735]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
Алена Б.
Guest
Спасибо, завтра напишу что получилось...
22 дек 04, 09:47    [1198764]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
SELECT *
FROM LinkServer.Northwind.dbo.Shippers
все 4 части в имени обязательны (dbo)
22 дек 04, 09:48    [1198771]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
Алена Б.
Guest
VladRUS.ca
SELECT *
FROM LinkServer.Northwind.dbo.Shippers
все 4 части в имени обязательны (dbo)


а я всегда так и пишу..но все равно спасибо
22 дек 04, 09:54    [1198798]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
VladRUS.ca
Member

Откуда: Toronto
Сообщений: 1172
Алена Б.
Форма записи примерно такая?

автор
...
SELECT *
FROM LinkServer.Northwind..Shippers
22 дек 04, 09:56    [1198811]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
Алена Б.
Guest
Проблема решилась довольно просто вместо OPENROWSET пришлось использовать OPENDATASOURCE (отдельно для каждой таблицы базы) при этом все работает на УРА! вот только ВРЕМЯ выполнения запроса приличное и думаю что на компах пользователей оно будет еще ВЫШЕ.
Преимущества OPENDATASOURCE для меняв том, что ненадо извращаться и писать динамические запросы, конкатенации и делать linkedserver.
МОЖЕТ БЫТЬ МЕНЯ КТО-ТО ПЕРЕУБЕДИТ В ОБРАТНОМ?
24 дек 04, 08:15    [1206412]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
Glory
Member

Откуда:
Сообщений: 104760
МОЖЕТ БЫТЬ МЕНЯ КТО-ТО ПЕРЕУБЕДИТ В ОБРАТНОМ?

Ну так "вот только ВРЕМЯ выполнения запроса приличное " разве не аргумент ?
24 дек 04, 09:50    [1206623]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
Алена Б.
Guest
Ну так "вот только ВРЕМЯ выполнения запроса приличное " разве не аргумент ?[/quot]

Да это так, но этот запрос будет выполняться пользователем максимум 1 или 2 в год, во время заполнения базы, данными с других серверов. Может и подождать, главное, что работает...
27 дек 04, 08:58    [1210566]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно объявить переменные внутри OPENROWSET  [new]
Glory
Member

Откуда:
Сообщений: 104760
Угу. А через год, когда окажется что имя линкованного сервера (имя пользователя, пароль) уже другие, кто-то в спешном порядке бросится искать все процедуры где это имя упоминается.

Либо кто-то умный раскопает текст процедуры и получит пользователя/пароль для прямого доступа к линкованному серверу.
27 дек 04, 10:04    [1210713]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить