SQL सर्वर कार्य को किसी अन्य कार्य के भीतर कॉल करना


11

क्या किसी अन्य नौकरी के भीतर चलाने के लिए SQL सर्वर नौकरी को कॉल करना संभव है?

मुझे पता है कि हम जॉब 1 के सभी चरणों को जॉब 2 में जोड़ सकते हैं, लेकिन मैं ऐसा नहीं करना पसंद करता हूं। पहला जॉब 2 पहले से ही काफी बड़ा है और दूसरा मुझे जॉब के बीच स्टेप्स को कॉपी करने के लिए कॉपी-पेस्ट का ऑप्शन नहीं मिल रहा है, इसलिए मैन्युअली स्टेप्स जोड़ने में समय लगेगा।

किसी भी सुझाव की सराहना की है।

जवाबों:


7
  • उस नौकरी पर राइट क्लिक करें, जिसके चरण आप जोड़ना चाहते हैं और "स्क्रिप्ट जॉब अस-> नई क्वेरी विंडो में बनाएँ", जिसके परिणामस्वरूप स्क्रिप्ट में सभी वर्गों के लिए यह प्रारूप है।
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'<stepname>', 
  @step_id=1, 
  @cmdexec_success_code=0, 
  @on_success_action=3, 
  @on_success_step_id=0, 
  @on_fail_action=2, 
  @on_fail_step_id=0, 
  @retry_attempts=0, 
  @retry_interval=0, 
  @os_run_priority=0, @subsystem=N'TSQL', 
  @command=N'<code>', 
  @database_name=N'', 
  @flags=0
  • एक नई क्वेरी विंडो खोलें और इसे चलाएं:
DECLARE @jobId BINARY(16)
    SET @jobId = (SELECT job_id FROM msdb.dbo.sysjobs WHERE name = '<job name, to which you want to copy the steps>')

-- Followed by all the msdb.dbo.sp_add_jobstep from the script that scripted out in the earlier step

    EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'<stepname>', 
      @step_id=1, 
      @cmdexec_success_code=0, 
      @on_success_action=3, 
      @on_success_step_id=0, 
      @on_fail_action=2, 
      @on_fail_step_id=0, 
      @retry_attempts=0, 
      @retry_interval=0, 
      @os_run_priority=0, @subsystem=N'TSQL', 
      @command=N'<code>', 
      @database_name=N'', 
      @flags=0

15

विकल्प 1

Job2 में, TSQL कमांड का एक कार्य चरण बनाएं। सामग्री में, क्या यह मौजूदा नौकरी चला रहा है ( sp_start_job )

EXECUTE msdb.dbo.sp_start_job 'Job1'

यह अतुल्यकालिक रूप से चलने वाला है, इस प्रकार जब यह संग्रहित प्रक्रिया को कॉल करना शुरू करता है, तो यह वापस आ जाएगा और नौकरी में अगले चरण का प्रदर्शन करेगा। यह उस काम के पूरा होने का इंतजार नहीं करेगा। यदि कहा जाता है कि नौकरी विफल हो जाती है, तो यह वापस आने वाली नौकरी को नष्ट नहीं करेगा।

विकल्प 2

नई क्वेरी विंडो में Job1 और स्क्रिप्ट पर राइट क्लिक करें। Job2 के साथ इसे दोहराएं और फिर नौकरी के चरणों को 1 से 2 के रूप में / जहां आवश्यक हो। पहिया को फिर से बनाने की तुलना में बहुत कम क्लिक करना और उम्मीद से कम त्रुटि का खतरा।


आपके जवाब के लिए धन्यवाद। ऐसा लगता है कि हमें विकल्प 2 के लिए जाना है। मुझे यकीन नहीं है कि मैं इसे सही तरीके से समझ पाया हूं। क्या आपका मतलब है कि मुझे दोनों नौकरियों के लिए स्क्रिप्ट बनानी चाहिए, और फिर job1 के अंत में job2 के चरणों को जोड़ना चाहिए? क्या वह सही है?
स्काई

6

स्टैकओवरफ़्लो (माफ़ाफू) से

WAITFOR DELAY '00:00:02';
while exists (select * from msdb.dbo.sysjobs j 
                inner join msdb.dbo.sysjobactivity a on j.job_id = a.job_id 
                where name = 'Job 1' 
                and stop_execution_date is null and start_execution_date is not null)
begin
    PRINT 'Waiting...'
    WAITFOR DELAY '00:00:02';   
end

यह हमारे लिए उपयोगी था, जहां हमें देर शाम पहली नौकरी के निष्पादन के आधार पर दूसरी नौकरी (जो अगले दिन चलती है) के निष्पादन में देरी करने की आवश्यकता थी।
जेम्स डी

मैं एक SYNC (दैनिक) और वृद्धिशील (प्रति घंटा) नौकरियां चला रहा हूं और इससे मुझे Incremental पर एक जांच रखने और SYNC चलाने के लिए समाप्त होने तक प्रतीक्षा करने में मदद मिली।
snp.it
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.