|
|
|
Valued Member
      
Group: General Forum Members
Last Login: Yesterday @ 9:52 AM
Points: 69,
Visits: 213
|
|
Hi all, I have a job that has one step (to populate table A). There is an external app that processes data from table A and deletes all rows from it. I need to add next step to a job ONLY if table A is empty. Is it possible via GUI? Something like IF EXISTS (select 1 from A) execute step 2. The problem is that amount of time for the app to process table A is different every time. How would you do it?
Thanks, Eugene
|
|
|
|
|
SSC Veteran
      
Group: General Forum Members
Last Login: Today @ 6:22 AM
Points: 275,
Visits: 792
|
|
How about making the second job step script check the table with COUNT(*) & return if the table is not empty.
If you need to wait between steps 1 & 2, could you make the second step a separate job & run it after an interval that's enough for the app to finish?
|
|
|
|
|
SSC Rookie
      
Group: General Forum Members
Last Login: Tuesday, April 16, 2013 5:51 AM
Points: 38,
Visits: 129
|
|
Hi eugene,
Have a look at the below URL. It will help you...
http://stackoverflow.com/questions/9530983/ssis-execute-first-task-if-condition-met-else-skip-to-next
|
|
|
|
|
Valued Member
      
Group: General Forum Members
Last Login: Yesterday @ 9:52 AM
Points: 69,
Visits: 213
|
|
Thanks for replies, I don't use SSIS. Not sure if it makes sense, but I was hoping to place the check for number of rows in table A (function call below) at the beginning of the second step, but it fails:
CREATE FUNCTION [dbo].[num_rows_in_A_fn] () RETURNS int BEGIN DECLARE @num_rows int SET @num_rows = (select COUNT(*) from A) if @num_rows = 0 begin WAITFOR DELAY '00:00:10'; -- call itself exec [dbo].[num_rows_in_A_fn] end RETURN @num_rows END ------ Msg 443, Level 16, State 14, Procedure num_rows_in_queue_fn, Line 11 Invalid use of a side-effecting operator 'WAITFOR' within a function. ------
Thanks, Eugene
|
|
|
|
|
SSC Rookie
      
Group: General Forum Members
Last Login: Thursday, May 02, 2013 6:43 AM
Points: 33,
Visits: 183
|
|
If your app has access to delete data on your server, does it also ave access to run a job? If the app kicks off the job only after its done its processing then you won't have any downtime between the two steps. It could use something like:
EXEC msdb..sp_start_job @job_name= 'jobname here'
SQL Tips and Scripts SQLWorks Blog
|
|
|
|
|
SSC Veteran
      
Group: General Forum Members
Last Login: Today @ 6:22 AM
Points: 275,
Visits: 792
|
|
eugene.pipko (10/3/2012)
Thanks for replies, I don't use SSIS. Not sure if it makes sense, but I was hoping to place the check for number of rows in table A (function call below) at the beginning of the second step, but it fails: CREATE FUNCTION [dbo].[num_rows_in_A_fn] () RETURNS int BEGIN DECLARE @num_rows int SET @num_rows = (select COUNT(*) from A) if @num_rows = 0 begin WAITFOR DELAY '00:00:10'; -- call itself exec [dbo].[num_rows_in_A_fn] end RETURN @num_rows END ------ Msg 443, Level 16, State 14, Procedure num_rows_in_queue_fn, Line 11 Invalid use of a side-effecting operator 'WAITFOR' within a function. ------ Thanks, Eugene
If you want a wait loop, just do the check in the loop & exit when it passes. Do it all within the same sp - something like this:
CREATE PROCEDURE [dbo].[RunJob] AS BEGIN SET NOCOUNT ON; DECLARE @num_rows int; SET @num_Rows = 999;
WHILE @num_rows > 0 BEGIN SET @num_rows = (select COUNT(*) from A); if @num_rows > 0 WAITFOR DELAY '00:00:10';
-- Possibly add some code to prevent an infinite loop? END
-- Call job: exec [dbo].[TheJobYouWantToRun]
END
|
|
|
|
|
Valued Member
      
Group: General Forum Members
Last Login: Yesterday @ 9:52 AM
Points: 69,
Visits: 213
|
|
| Thank you, it is close to what I wanted to achieve.
|
|
|
|