Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как использовать в запросе результат из хранимой процедуры [MSSQL]


Страницы:   1 2

Раиса ©   (2010-01-26 15:57:00) 

В QA выполняю:
declare @date_from datetime

set EXECUTE @date_from=dbo.last_run_job 'A_s_p'  
print @date_from


dbo.last_run_job 'A_s_p'    - это хранимая процедура, в конце которой выполняется select, возвращающий одно поле типа datetime

Нужно в DTS-пакете в Transform Data Task использовать полученную переменную в select. Выдается ошибка (некорректный синтаксис).

Помогите, пожалуйста.


Раиса   (2010-01-27 15:30:00) [1]

Вставила set nocount on в текст процедуры и отработал пакет. Помогли на sql.ru.
Спасибо всем, советы помогли.


Раиса   (2010-01-27 12:53:00) [2]

stas ©   (27.01.10 08:50) [19]
Спасибо за совет, воспользовалась.

Теперь всё сначала. Напишу, как на sql.ru

Создала новый пакет. Могу отлаживаться. В хранимой процедуре использую постоянную таблицу. Кинула 3 компонента. Источник и приемник связала. В Transform Data Task пытаюсь вставить запрос, который В QA отрабатывает (код ниже).

declare @date_from datetime
EXECUTE dbo.last_run_job 'ARPU_sigma_positions' , @date_from OUT
set @date_from=@date_from-(select datediff(hh,getutcdate(),getdate()))/24.0

select * from pos_twin
where datetime>=@date_from


В DTS-пакете не отрабатывает. На выполнении выдается ошибка. При "двойном щелчке" говорит неправильный указатель.

Что у меня не так?


turbouser   (2010-01-27 11:13:00) [3]


> Раиса ©   (27.01.10 11:06) [25]

В общем-то на скл.ру ответили..


Раиса   (2010-01-27 11:06:00) [4]

ЗАПРОСЫ НЕ МОИ, ПЕРЕПИСЫВАТЬ НАДО НЕ ИХ!!! НАДО ЗАМЕНИТЬ ОДНУ ПЕРЕМЕННУЮ.

Ошибка при parse Query.........................


turbouser   (2010-01-27 10:55:00) [5]


> Раиса ©   (27.01.10 10:50) [22]

Ну, во первых, если уж используются алиасы, то и в селекте надо их использовать. типа а. board_number, и т.п.
а вот за такое , datetime,- мм.. не надо так делать :) и если уж "так получилось", то хотя бы [datetime]

а где тут
>  Ошибка: invalid object name ##имя моей временной таблиц
> (при проверке синтаксиса).

? "##имя моей временной таблиц" здесь нет..


stas   (2010-01-27 10:50:00) [6]

А если выполнить не в DTS работает?


Раиса   (2010-01-27 10:50:00) [7]

Задала вопрос на sql.ru, там код есть.
http://www.sql.ru/forum/actualthread.aspx?tid=730251

И сюда напишу (удалила только ненужные комментарии, типа кто и когда вставлял строку, всё прямо из Transform Data Task ):
declare @date_from datetime
declare @date_to datetime
set @date_to = getutcdate()
EXECUTE dbo.last_run_job 'ARPU_sigma_positions' , @date_from OUT

SELECT     board_number, datetime, dbo.MakeLatitude(Latitude) lat, dbo.MakeLongitude(longitude) lon, course, velocity
JOIN dbo.fn_zd_cd(@date_from, @date_to, 'zh(21)')  f on f.id_pos=a.id_pos
from pos_twin a WITH (NOLOCK)  
JOIN dbo.fn_zd_cd (@date_from, @date_to, 'zh(21)')  f on f.id_pos=a.id_pos
left join ves on ves.id_ves=a._id_ves
left join own on ves.id_own=own.id_own
where a.sinhronized in (0,1,2)
order by iki_own, iki_ves


turbouser   (2010-01-27 10:40:00) [8]


> Раиса ©   (27.01.10 09:30) [20]


> Ошибка:

код процедуры можно увидеть?


Раиса   (2010-01-27 09:30:00) [9]

Transform Data Task  = "черная стрелочка".

stas ©   (27.01.10 08:50) [19]
Процедуру исправила. Написала
declare @date_from datetime
EXECUTE dbo.myprocedure 'A_s_p' , @date_from OUT

Ошибка: invalid object name ##имя моей временной таблиц (при проверке синтаксиса).


stas   (2010-01-27 08:50:00) [10]


> Раиса ©   (26.01.10 21:03) [15]
>
> Про out параметры слышала, но никогда ничего не писала с
> их использованием....

create procedure myprocedure
@par1 nvarchar(50)
@par2 datetime out
as
begin
...
set @par2 = (select mydatetimefield from mytable where...)
end


вызов
declare @date_from datetime
EXECUTE dbo.myprocedure 'A_s_p' , @date_from OUT


sniknik   (2010-01-26 23:46:00) [11]

> но здесь речь идет о "черной стрелочке"...
а как это будет по русски, о чем речь?


Раиса   (2010-01-26 23:29:00) [12]

Попробовать смогу только завтра то, что предложено turbouser ©   (26.01.10 19:48) [13], но не верю, так как можно использовать только один select с нужными полями для трансформации в dbf.

С курсорами писала хранимые процедуры, но здесь речь идет о "черной стрелочке"...

Когда я пробовала писать в Transform Data Task какой-либо select (кроме того, который выдает поля для dbf), то "съезжало" в destination  всё и оставалось одно поле с датой...

Мне надо примерно так:
SELECT * from nametable where pdatetime>=(select переменная из хранимой процедуры) ...

Ничего кроме declare,set и одного select писать нельзя (это моё мнение, которое может быть ошибочным) в Transform Data Task ....


sniknik   (2010-01-26 21:10:00) [13]

> Не представляю, как мне поможет курсор
им можно выбрать записи из рекордсета

> и как его использовать.
а вот это другое дело. обратись в хелп.

хотя... способ предложенный в turbouser ©   (26.01.10 19:48) [13], на порядок проще, и лучше (и чего я про это сразу не подумал...), т.что можно не отвлекаться.


Раиса   (2010-01-26 21:03:00) [14]

Про out параметры слышала, но никогда ничего не писала с их использованием....

sniknik ©   (26.01.10 19:19) [11]
sniknik ©   (26.01.10 19:23) [12]
Не представляю, как мне поможет курсор и как его использовать.

Раиса ©   (26.01.10 16:30) [4]
надо в "черной стрелке" написать
Было так (в упрощенном виде) :
declare @date_from datetime
set @date_from=getdate()-1
SELECT * from nametable where pdatetime>=@date_from


Значение @date_from надо заменить на значение из хранимой процедуры. Казалось, что проблем не будет....VBScript-а в DTS нет, только "банки" и "стрелки".


turbouser   (2010-01-26 19:49:00) [15]

Хотя,  с out параметром более адекватно выглядит


turbouser   (2010-01-26 19:48:00) [16]

можно еще так :)
declare @T table (date_from datetime)
inserert @T exec dbo.last_run_job 'A_s_p'
select @date_from=date_from from @T


sniknik   (2010-01-26 19:23:00) [17]

кстати если не получится прямо использовать процедуру в курсоре то можно попробовать "трюк", вложить процедуру в openrowset с указанием "на себя". а из него селект, с селектом то по любому должно сработать.


sniknik   (2010-01-26 19:19:00) [18]

> в конце которой выполняется select, возвращающий одно поле типа datetime
если делает селект то возвращает рекордсет, на который можно попробовать "повесить" курсор...

не знаю получится ли, не пробовал так.


12   (2010-01-26 16:56:00) [19]

ну, наверное, как-то можно.. :)
но все же, имхо, проще держать таблицы вида
tmpDTSExport_1C
tmpDTSExport_Site


Раиса   (2010-01-26 16:48:00) [20]

12 ©   (26.01.10 16:44) [8]
не то.... Мне надо всего лишь в чужом DTS пакете изменить значение одной переменной, взяв ее из хранимой процедуры (в которой есть create временной таблицы, insert.... )


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо