การเรียกใช้งาน SQL Server ภายในงานอื่น


10

เป็นไปได้ไหมที่จะเรียกใช้งาน SQL Server เพื่อให้ทำงานภายในงานอื่นได้?

ฉันรู้ว่าเราสามารถเพิ่มขั้นตอนทั้งหมดของงาน 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

14

ตัวเลือกที่ 1

ใน Job2 สร้างขั้นตอนงานของประเภทคำสั่ง TSQL ในเนื้อหาให้มันรันงานที่มีอยู่ ( sp_start_job )

EXECUTE msdb.dbo.sp_start_job 'Job1'

นั่นคือการเรียกใช้แบบอะซิงโครนัสดังนั้นหลังจากที่เริ่มการเรียกกระบวนงานที่เก็บไว้มันจะส่งคืนและดำเนินการขั้นตอนถัดไปในงาน มันจะไม่รอให้งานเริ่มต้นนั้นเสร็จสมบูรณ์ หากงานที่เรียกใช้ล้มเหลวงานนั้นจะไม่กระจายกลับไปยังงานที่เรียกใช้

ตัวเลือก 2

คลิกขวาที่ Job1 และสคริปต์ไปที่หน้าต่างแบบสอบถามใหม่ ทำซ้ำกับ Job2 แล้วทำขั้นตอนงานตั้งแต่ 1 ถึง 2 ตามต้องการ คลิกน้อยลงกว่าการสร้างวงล้อและหวังว่าจะเกิดข้อผิดพลาดน้อยลง


ขอบคุณสำหรับการตอบกลับของคุณ. ดูเหมือนว่าเราจะต้องเลือกตัวเลือกที่ 2 ฉันไม่แน่ใจว่าฉันเข้าใจถูกต้องหรือไม่ คุณหมายถึงฉันควรสร้างสคริปต์สำหรับงานทั้งสองและจากนั้นผนวกขั้นตอนของ job2 เพื่อสิ้นสุด job1 หรือไม่ นั่นถูกต้องใช่ไหม?
Sky

6

จาก stackoverflow (mafafu)

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

สิ่งนี้มีประโยชน์สำหรับเราโดยที่เราต้องชะลอการเรียกใช้งานที่สอง (ซึ่งจะทำงานในเช้าวันรุ่งขึ้น) ตามการดำเนินงานแรกในช่วงเย็น
James D

ฉันใช้งานระบบ SYNC (รายวัน) และงานส่วนเพิ่ม (รายชั่วโมง) และสิ่งนี้ช่วยให้ฉันตรวจสอบส่วนเพิ่มเติมและรอจนกว่าจะเสร็จสิ้นการเรียกใช้งานระบบ SYNC
snp.it
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.