Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

एक बहु-चरणीय SQL सर्वर एजेंट कार्य बनाएँ (T-SQL)

टी-एसक्यूएल के साथ एक एसक्यूएल सर्वर एजेंट नौकरी बनाने के बारे में पिछले लेख में, मैंने दिखाया कि एक ही चरण के साथ नौकरी कैसे बनाई जाए।

इस लेख में, मैं आपको दिखाऊंगा कि कई चरणों में नौकरी कैसे बनाई जाती है।

उदाहरण

जब आप T-SQL के साथ SQL सर्वर एजेंट जॉब बनाते हैं, तो आपको कई संग्रहीत कार्यविधियों का उपयोग करने की आवश्यकता होती है। ऐसा इसलिए है क्योंकि प्रत्येक भाग को स्वतंत्र रूप से दूसरों के साथ व्यवहार किया जाता है। उदाहरण के लिए, sp_add_job प्रक्रिया नौकरी बनाती है, और sp_add_jobstep प्रक्रिया उस कार्य में एक कदम बनाती है।

जब आप एक नौकरी बनाते हैं जिसमें एक से अधिक चरण होते हैं, तो आपको sp_add_jobstep पर कॉल करने की आवश्यकता होती है कई बार, प्रत्येक कॉल एक अलग चरण को परिभाषित करती है।

साथ ही, यदि आप चाहते हैं कि कार्य चरणों के माध्यम से आगे बढ़े (और पहले चरण के बाद कार्य से बाहर न निकलें), तो आपको यह निर्दिष्ट करना होगा कि जब आप प्रक्रिया को कॉल करते हैं।

यहां एक उदाहरण दिया गया है जो यह सब करता है।

USE msdb;  
GO  
EXEC sp_add_job  
    @job_name = N'SqlAgentTest',
    @description = N'Backup the Movies database.',
    @category_name = 'Database Maintenance';
GO
EXEC sp_add_jobstep  
    @job_name = N'SqlAgentTest',  
    @step_name = N'Insert data for step 1',  
    @subsystem = N'TSQL',  
    @command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 1, SYSDATETIME())',  
    @on_success_action = 3;
GO
EXEC sp_add_jobstep  
    @job_name = N'SqlAgentTest',  
    @step_name = N'Insert data for step 2',  
    @subsystem = N'TSQL',  
    @command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 2, SYSDATETIME())',  
    @on_success_action = 1;
GO
EXEC sp_add_schedule 
    @schedule_name = N'Run_Sat_6AM',
    @freq_type = 8,
    @freq_interval = 64,
    @freq_recurrence_factor = 1,
    @active_start_time = 060000;
GO  
EXEC sp_attach_schedule  
   @job_name = N'SqlAgentTest',  
   @schedule_name = N'Run_Sat_6AM';
GO  
EXEC sp_add_jobserver  
    @job_name = N'SqlAgentTest',  
    @server_name = N'(LOCAL)';
GO

वह कोड दो कार्य चरणों के साथ एक कार्य बनाता है। यह एक नया शेड्यूल भी बनाता है, उस कार्य को शेड्यूल से जोड़ता है, फिर स्थानीय सर्वर पर कार्य को लक्षित करता है।

वह भाग जो कार्य चरण बनाता है वह यह है:

EXEC sp_add_jobstep  
    @job_name = N'SqlAgentTest',  
    @step_name = N'Insert data for step 1',  
    @subsystem = N'TSQL',  
    @command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 1, SYSDATETIME())',  
    @on_success_action = 3;
GO
EXEC sp_add_jobstep  
    @job_name = N'SqlAgentTest',  
    @step_name = N'Insert data for step 2',  
    @subsystem = N'TSQL',  
    @command = N'USE TestDB; INSERT INTO SqlAgentJobs VALUES (''SqlAgentTest'', 2, SYSDATETIME())',  
    @on_success_action = 1;
GO

पहली कॉल में, जो भाग @on_success_action = 3 . जाता है वह है जो कार्य को अगले चरण तक जारी रखता है।

डिफ़ॉल्ट मान 1 है , जिसका अर्थ है कि पहला चरण पूरा होने के बाद नौकरी छोड़ दी जाएगी (जिसे हमने दूसरे चरण में निर्दिष्ट किया है)। तो अगर हमने @on_success_action = 3 . को शामिल नहीं किया होता पहले चरण में भाग लेने पर, अगले चरण पर आगे बढ़े बिना नौकरी छोड़ दी जाएगी।

आप @on_fail_action भी निर्दिष्ट कर सकते हैं , जो निर्दिष्ट करता है कि यदि वह चरण विफल हो जाता है तो क्या होगा।

वे मान जो आप @on_success_action . को प्रदान कर सकते हैं और @on_fail_action इस प्रकार हैं:

1 सफलतापूर्वक छोड़ें। यह @on_success_action . के लिए डिफ़ॉल्ट है ।
2 विफलता से बाहर निकलें। यह @on_fail_action . के लिए डिफ़ॉल्ट है ।
3 अगले चरण पर जाएं।
4 चरण (आईडी) पर जाएं। यह वह जगह है जहां आप उस चरण की आईडी प्रदान करते हैं जिसके लिए आप कार्य को आगे बढ़ाना चाहते हैं।

नौकरी के चरण देखें

आप sp_help_job का उपयोग कर सकते हैं सिस्टम में SQL सर्वर एजेंट जॉब के बारे में जानकारी प्राप्त करने के लिए।

आप इसे पैरामीटर के साथ या बिना पैरामीटर के उपयोग कर सकते हैं, लेकिन कार्य चरण विवरण प्राप्त करने के लिए, आपको कार्य का नाम या आईडी प्रदान करना होगा।

हम इसका उपयोग नौकरी के लिए बनाए गए दोनों कार्य चरणों को देखने के लिए कर सकते हैं।

इस तरह:

EXEC sp_help_job 
	@job_name = 'SqlAgentTest';

SSMS में इसे निष्पादित करते समय परिणाम कैसा दिखता है:

आईडी का उपयोग करते समय कोड का एक उदाहरण यहां दिया गया है:

EXEC sp_help_job 
	@job_id = '343D9F2A-070A-4367-BF69-4248FFF57D70';

आईडी का उपयोग करते समय, आप चाहें तो पैरामीटर नाम को छोड़ सकते हैं।

उदाहरण:

EXEC sp_help_job '343D9F2A-070A-4367-BF69-4248FFF57D70';

आप sp_help_jobstep . का भी उपयोग कर सकते हैं उसी तरह नौकरी के चरणों को वापस करने के लिए (नौकरी के बारे में अन्य सभी जानकारी के बिना)। यह कार्य का नाम या आईडी, साथ ही एक वैकल्पिक चरण नाम या आईडी स्वीकार करता है।

पूर्ण सिंटैक्स

sp_add_jobstep . का पूरा सिंटैक्स इस तरह जाता है:

sp_add_jobstep [ @job_id = ] job_id | [ @job_name = ] 'job_name'
     [ , [ @step_id = ] step_id ]
     { , [ @step_name = ] 'step_name' }
     [ , [ @subsystem = ] 'subsystem' ]
     [ , [ @command = ] 'command' ]
     [ , [ @additional_parameters = ] 'parameters' ]
          [ , [ @cmdexec_success_code = ] code ]
     [ , [ @on_success_action = ] success_action ]
          [ , [ @on_success_step_id = ] success_step_id ]
          [ , [ @on_fail_action = ] fail_action ]
          [ , [ @on_fail_step_id = ] fail_step_id ]
     [ , [ @server = ] 'server' ]
     [ , [ @database_name = ] 'database' ]
     [ , [ @database_user_name = ] 'user' ]
     [ , [ @retry_attempts = ] retry_attempts ]
     [ , [ @retry_interval = ] retry_interval ]
     [ , [ @os_run_priority = ] run_priority ]
     [ , [ @output_file_name = ] 'file_name' ]
     [ , [ @flags = ] flags ]
     [ , { [ @proxy_id = ] proxy_id
         | [ @proxy_name = ] 'proxy_name' } ]

sp_add_jobstep . के लिए Microsoft के दस्तावेज़ देखें प्रत्येक पैरामीटर के स्पष्टीकरण के लिए, साथ ही साथ प्रत्येक मान जो स्वीकार करता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक डेटाबेस मेल प्रोफाइल बनाएं (SSMS)

  2. समतल प्रतिच्छेदन समय अवधि

  3. चुनिंदा क्वेरी में ऑटो इंक्रीमेंट फ़ील्ड कैसे जनरेट करें?

  4. संग्रहीत प्रक्रिया और अनुमतियाँ - क्या निष्पादन पर्याप्त है?

  5. SQL सर्वर में INSERT INTO SELECT क्वेरी में डुप्लिकेट से बचें