Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
15-1307468386
Kerk
2011-06-07 21:39
2011.10.02
Delphi Certification Program – Official Announcement


15-1307004281
Term
2011-06-02 12:44
2011.10.02
Установка двух версий делфи на один комп


2-1307895125
Leon-Z
2011-06-12 20:12
2011.10.02
Предупреждение компилятора.


15-1307392194
Юрий
2011-06-07 00:29
2011.10.02
С днем рождения ! 7 июня 2011 вторник


2-1307943465
Gu
2011-06-13 09:37
2011.10.02
Инициализация application в dll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский