คำถามเก่านี้สมควรได้รับคำตอบที่ครอบคลุมมากขึ้น บางส่วนถูกกล่าวถึงในคำตอบ / ความคิดเห็นอื่น ๆ ที่นี่คนอื่น ๆ อาจหรืออาจไม่ทำงานในสถานการณ์ที่เฉพาะเจาะจงของ OP แต่อาจทำงานให้ผู้อื่นที่กำลังมองหาการโทร procs ที่เก็บไว้แบบอะซิงโครนัสจาก SQL
เพียงเพื่อจะชัดเจนทั้งหมด: TSQL ไม่ได้ (ด้วยตัวเอง) มีความสามารถที่จะเปิดตัวการดำเนินงานอื่น ๆ TSQL ถ่ายทอดสด
ไม่ได้หมายความว่าคุณยังมีตัวเลือกไม่มาก:
- งานของ บริษัท ตัวแทน SQL : สร้างงาน SQL หลายและตารางการอย่างใดอย่างหนึ่งให้พวกเขาทำงานในเวลาที่ต้องการหรือเริ่มต้นพวกเขาถ่ายทอดสดจาก "ควบคุม" ที่เก็บไว้ proc
sp_start_job
ใช้ หากคุณจำเป็นต้องติดตามความคืบหน้าของพวกเขา programatically เพียงให้แน่ใจว่างานที่ปรับปรุงแต่ละตาราง JOB_PROGRESS ที่กำหนดเอง (หรือคุณสามารถตรวจสอบเพื่อดูว่าพวกเขาได้เสร็จสิ้นได้ใช้ฟังก์ชั่นที่ไม่มีเอกสารxp_sqlagent_enum_jobs
ตามที่อธิบายไว้ในบทความนี้ดีเกรกอรีเอเสน) คุณต้องสร้างงานที่แยกกันมากเท่าที่คุณต้องการให้กระบวนการแบบขนานทำงานแม้ว่าพวกเขาจะเรียกใช้ proc ที่เก็บไว้เดียวกันกับพารามิเตอร์ที่แตกต่างกัน
- SSIS Package : สำหรับสถานการณ์แบบอะซิงโครนัสที่ซับซ้อนยิ่งขึ้นให้สร้างแพ็คเกจ SSIS ด้วยขั้นตอนการแยกสาขาอย่างง่าย SSIS จะเริ่มงานเหล่านั้นในแต่ละช่องซึ่ง SQL จะทำงานแบบขนาน เรียกแพคเกจ SSIS จากงานตัวแทนของ SQL
- แอปพลิเคชันที่กำหนดเอง : เขียนแอปที่กำหนดเองอย่างง่ายในภาษาที่คุณเลือก (C #, Powershell, ฯลฯ ) โดยใช้วิธีการแบบอะซิงโครนัสจากภาษานั้น โทร proc ที่เก็บไว้ของ SQL ในแต่ละเธรดของแอปพลิเคชัน
- OLE Automation : ใน SQL ใช้
sp_oacreate
และsp_oamethod
เปิดกระบวนการใหม่เรียก proc ที่เก็บไว้ตามที่อธิบายไว้ในบทความนี้โดย Gregory A. Larsen
- บริการนายหน้า : มองในการใช้บริการนายหน้าเป็นตัวอย่างที่ดีของการดำเนินการไม่ตรงกันในบทความนี้
- การเรียกใช้ CLR Parallel : ใช้คำสั่ง CLR
Parallel_AddSql
และParallel_Execute
ตามที่อธิบายไว้ในบทความนี้โดย Alan Kaplan (SQL2005 + เท่านั้น)
- ภารกิจ Windows ที่กำหนดเวลาไว้ : แสดงเพื่อความสมบูรณ์ แต่ฉันไม่ใช่แฟนของตัวเลือกนี้
ถ้าเป็นฉันฉันอาจใช้ SQL Agent Agent หลายตัวในสถานการณ์ที่ง่ายกว่าและแพ็คเกจ SSIS ในสถานการณ์ที่ซับซ้อนมากขึ้น
ในกรณีของคุณการโทรงานตัวแทน SQL ดูเหมือนจะเป็นทางเลือกที่ง่ายและจัดการได้
หนึ่งความคิดเห็นสุดท้าย : SQL ได้พยายามที่จะขนานการดำเนินงานของแต่ละบุคคลเมื่อใดก็ตามที่มันสามารถ * ซึ่งหมายความว่าการทำงาน 2 งานในเวลาเดียวกันแทนที่จะเป็นงานกันไม่รับประกันว่างานจะเสร็จเร็วกว่า ทดสอบอย่างรอบคอบเพื่อดูว่ามันปรับปรุงอะไรจริง ๆ หรือไม่
เรามีนักพัฒนาที่สร้างแพ็คเกจ DTS เพื่อทำงาน 8 อย่างในเวลาเดียวกัน น่าเสียดายที่มันเป็นเพียงเซิร์ฟเวอร์ 4-CPU :)
* สมมติว่าการตั้งค่าเริ่มต้น สิ่งนี้สามารถแก้ไขได้โดยการเปลี่ยนแปลงระดับสูงสุดของความขนานหรือความสัมพันธ์ของมาสก์หรือโดยใช้คำแนะนำการค้นหา MAXDOP