Страница 2 из 2
					
				Запуск долгой SP
				Добавлено: 22 Апрель 2015, 11:06
				 Aragorn
				Если я не ошибаюсь триггер на инсерт работает с таблицей INSERTED, в которой к моменту работы триггера уже скопились все вставляемые командой записи, так что поштучно с записями работать не выйдет.
А целевая таблица пополняется или каждый раз новая? Я почему спрашиваю, INSERT INTO влет работает, даже ждать не надо.
			 
			
					
				Запуск долгой SP
				Добавлено: 22 Апрель 2015, 11:27
				 kreator
				Я имел ввиду вот что.
Добавляем записи в Таблицу1. А в Таблице2 (типа временная) создаём до процесса добавления запись, допустим из двух полей Current=0, Total=сумма записей, которые надо добавить. 
В триггере по Insert пишем такой запрос:
update Таблица2
set Current = Current + 1
Всё. Можно читать Таблицу2 и сравнивать Current с Total.
			 
			
					
				Запуск долгой SP
				Добавлено: 22 Апрель 2015, 16:07
				 Aragorn
				 В триггере по Insert пишем такой запрос:
update Таблица2
set Current = Current + 1
Всё. Можно читать Таблицу2 и сравнивать Current с Total. 
Я же говорю, триггер оперирует СРАЗУ ВСЕМИ вставляемыми в операторе insert записями, которые содержатся в таблице  INSERTED, так что set Current = Current + 1 скорее всего сработает всего один раз... По крайней мере в MSSQL точно. И потом, клиент не замучит сервер долбясь к Таблице 2 считывая значения полей? 
Я не знаю, правильно это или нет, но мне кажется лучше, если клиентское приложение не дергает сервак по всяким пустякам. А то бывает запустишь Profiler и тихо обалдеваешь...
 
			
					
				Запуск долгой SP
				Добавлено: 22 Апрель 2015, 16:57
				 kreator
				Aragorn писал(а):Я же говорю, триггер оперирует СРАЗУ ВСЕМИ вставляемыми в операторе insert записями, которые содержатся в таблице INSERTED, так что set Current = Current + 1 скорее всего сработает всего один раз... 
Сомневаюсь. Но у нас похожего примера нет, пусть ingasoftplus проверит.
 
			
					
				Запуск долгой SP
				Добавлено: 22 Апрель 2015, 19:41
				 Aragorn
				Верно, все нужно проверять на деле  
 
 
Я же могу только добавить, что мои утверждения касаются как минимум MSSQL, где триггер  INSERT полностью зовется INSTEAD OF INSERT, и предназначен для замены стандартного добавления записей.
 
			
					
				Запуск долгой SP
				Добавлено: 22 Апрель 2015, 20:25
				 Shur
				
Говорить тут не о чем -- триггер действительно отработает только один раз. Так что триггер здесь не подойдет.
А вот что действительно можно использовать, так это системную информацию о процессе (MS SQL 2005+):
Код: Выделить всё
select p.spid,p.hostname,r.command,t.[text],p.cpu,r.reads,r.writes,r.logical_reads
from sys.sysprocesses p with (nolock)
   join sys.dm_exec_requests r with(nolock) on r.session_id = p.spid
      outer apply sys.dm_exec_sql_text(r.plan_handle) t
where 1=1
and (p.cmd<>'AWAITING COMMAND' or p.status='DORMANT')
and p.spid = @@spid
Привязывайте свой прогрессор хоть к cpu, хоть к reads, хоть к writes, хоть к logical_reads, хоть ко всем четырём сразу -- на выбор.
 
			
					
				Запуск долгой SP
				Добавлено: 22 Апрель 2015, 21:05
				 ingasoftplus
				все это чудестно!!!! если б не одно но.  В процедуре моей только один инсерт:
Код: Выделить всё
INSERT INTO table1 
( filed1,  … )  
(SELECT  
filed1, …   
FROM    table2 )       
и когда ее запускаешь - хоть тресни, пока она не отработает ты ничего из клары не узнаешь!!  даже если запостить  выходные параметры, они будут доступны только по окончанию работы!!
Сегодня проверил,
filename{prop:sql} = 'CALL  my_SP'  -  уже запускает процедуру и все виснет и ждет ее завершения, и уже потом
next (filename)  может что-то получить....
так что ничего не могу придумать путного. пусть юзер ждет  

 
			
					
				Запуск долгой SP
				Добавлено: 22 Апрель 2015, 21:50
				 Shur
				Даже если процедуру запускать в отдельном триде?
			 
			
					
				Запуск долгой SP
				Добавлено: 22 Апрель 2015, 21:56
				 ingasoftplus
				сложно сказать... слишком много телодвижений и сложно получается.  неужели никто конкретно не сталкивался???  опять велосипед?
			 
			
					
				Запуск долгой SP
				Добавлено: 22 Апрель 2015, 22:07
				 Дед Пахом
				что там сложного? Делаешь отдельную source-процедуру (можно даже локальную), пишешь в ней вызов хранимки, из формы её STARTушеь, как SP отработала, шлёшь в вызывающий тред Event:Notify, а в форме в это время кино крутишь.
			 
			
					
				Запуск долгой SP
				Добавлено: 22 Апрель 2015, 22:18
				 ingasoftplus
				можно попробовать так!
			 
			
					
				Запуск долгой SP
				Добавлено: 22 Апрель 2015, 23:41
				 Aragorn
				Все оказалось до противного просто  

про старт совсем забыл )