Форум: "Базы";
Текущий архив: 2011.10.02;
Скачать: [xml.tar.bz2];
ВнизКак использовать в запросе результат из хранимой процедуры Найти похожие ветки
← →
Раиса © (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;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.003 c