Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.10.02;
Скачать: CL | DM;

Вниз

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

 
Раиса ©   (2010-01-26 15:57) [0]

В 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. Выдается ошибка (некорректный синтаксис).

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


 
stas ©   (2010-01-26 16:18) [1]

Так нельзя.
см. Out параметры.


 
Ega23 ©   (2010-01-26 16:19) [2]

Declare
 @nsql nvarchar(1000),
 @date_from datetime;

Select @nsql = Cast("@date_from=dbo.last_run_job """A_s_p"""   ") as nvarchar (1000);

execute sp_executesql @nsql, N"@date_from datetime output", @date_from output;

Select @date_from;


Как-то так...


 
stas ©   (2010-01-26 16:20) [3]

вот так правильно, в хранимке объявите параметр тоже как OUT
declare @date_from datetime
EXECUTE @date_from=dbo.last_run_job "A_s_p" , @date_from OUT


 
Раиса ©   (2010-01-26 16:30) [4]

Может, непонятно написала....

надо в "черной стрелке" написать
SELECT * from nametable where pdatetime>=@date_from

Как там написать? В QA можно вывести в переменную. А там можно только один select и его потом в приемник-dbf.


 
12 ©   (2010-01-26 16:34) [5]

у меня хранимка пишет таблицу,
и потом ее дтс, безусловно


 
ANB   (2010-01-26 16:39) [6]

Вместо хранимой процедуры написать хранимую функцию.


 
Раиса ©   (2010-01-26 16:43) [7]

12 ©   (26.01.10 16:34) [5]
Хотелось бы без постоянных таблиц....

ANB   (26.01.10 16:39) [6]
В хранимой функции нельзя того, что нужно мне (insert, delete  и т.д.)


 
12 ©   (2010-01-26 16:44) [8]

не поможет?
http://www.sql.ru/FAQ/faq_topic.aspx?fid=133


 
Раиса ©   (2010-01-26 16:48) [9]

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


 
12 ©   (2010-01-26 16:56) [10]

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


 
sniknik ©   (2010-01-26 19:19) [11]

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

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


 
sniknik ©   (2010-01-26 19:23) [12]

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


 
turbouser ©   (2010-01-26 19:48) [13]

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


 
turbouser ©   (2010-01-26 19:49) [14]

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


 
Раиса ©   (2010-01-26 21:03) [15]

Про 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 нет, только "банки" и "стрелки".


 
sniknik ©   (2010-01-26 21:10) [16]

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

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

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


 
Раиса ©   (2010-01-26 23:29) [17]

Попробовать смогу только завтра то, что предложено 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 23:46) [18]

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


 
stas ©   (2010-01-27 08:50) [19]


> Раиса ©   (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


 
Раиса ©   (2010-01-27 09:30) [20]

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 ##имя моей временной таблиц (при проверке синтаксиса).


 
turbouser ©   (2010-01-27 10:40) [21]


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


> Ошибка:

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


 
Раиса ©   (2010-01-27 10:50) [22]

Задала вопрос на 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


 
stas ©   (2010-01-27 10:50) [23]

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


 
turbouser ©   (2010-01-27 10:55) [24]


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

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

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

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


 
Раиса ©   (2010-01-27 11:06) [25]

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

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


 
turbouser ©   (2010-01-27 11:13) [26]


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

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


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

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-пакете не отрабатывает. На выполнении выдается ошибка. При "двойном щелчке" говорит неправильный указатель.

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


 
Раиса ©   (2010-01-27 15:30) [28]

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



Страницы: 1 вся ветка

Текущий архив: 2011.10.02;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.009 c
15-1307587555
Дмитрий С
2011-06-09 06:45
2011.10.02
Как запретить всяким quicktime, vlc, acrobat-ам регистрироваться


1-1267175596
Vlad40
2010-02-26 12:13
2011.10.02
D2010 - внешний вид (border) и др. у TCategoryPanelGroup


15-1307426451
RWolf
2011-06-07 10:00
2011.10.02
File timestamps backup/restore


4-1250653039
mamedovvms
2009-08-19 07:37
2011.10.02
создание оболочки для консольного приложения


2-1308301208
Sergey
2011-06-17 13:00
2011.10.02
Refresh таблицы