dm_exec_describe_first_result_set_for_object สำหรับชุดผลลัพธ์หลายชุด


9

มีขั้นตอนในการส่งคืนข้อมูลเมตาสำหรับชุดผลลัพธ์ทั้งหมดในกระบวนงานที่เก็บไว้หรือไม่

มีบางอย่างที่เหมือนsys.dm_exec_describe_first_result_set_for_objectกัน แต่สำหรับชุดผลลัพธ์ทั้งหมด

ในที่สุดฉันจะต้องการค้นหาข้อมูลเมตาสำหรับทุกชุดผลลัพธ์ในทุกโพรซีเดอร์ที่เก็บในฐานข้อมูล สำหรับตอนนี้ฉันจะตัดสินให้เฉพาะชุดผลลัพธ์ที่sys.dm_exec_describe_first_result_set_for_objectไม่สามารถอธิบายได้ นั่นคือชุดผลลัพธ์ที่ 2, 3 และ Nth

ดูที่การใช้ SQLCLR เพื่อทำสิ่งนี้ตอนนี้:

วิธีบันทึกผลลัพธ์ของกระบวนงานที่มีชุดผลลัพธ์มากกว่าหนึ่งชุด
- การทดสอบหน่วย DB สำหรับ SQL Server - ResultSetFilter.cs


3
ไม่ไม่มีสิ่งภายใน SQL Server คุณจะต้องเขียนโค้ดเพื่อทำมัน (และคุณอาจต้องเดาในหลายกรณี)
Aaron Bertrand

คำตอบ:


3

มีขั้นตอนในการส่งคืนข้อมูลเมตาสำหรับชุดผลลัพธ์ทั้งหมดในกระบวนงานที่เก็บไว้หรือไม่

ไม่และใช่

ไม่

ไม่มี T-SQL ที่แท้จริงหมายถึงการเข้าถึงมากกว่าชุดผลลัพธ์แรก แม้แต่OPENROWSETและOPENQUERYก็มีข้อ จำกัด เหมือนกัน:

แม้ว่าเคียวรีอาจส่งคืนชุดผลลัพธ์หลายชุด OPEN (ROWSET | QUERY) จะส่งกลับเฉพาะชุดแรกเท่านั้น

สำหรับบันทึกนี้ฉันไม่ได้พูดหรืออ้างว่ามีเหตุผลทางเทคนิคทั่วไปสำหรับข้อ จำกัด นี้ ฉันเพียงแค่ชี้ให้เห็นว่าข้อ จำกัด ไม่ได้ จำกัด อยู่sp_describe_first_result_set, และsys.dm_exec_describe_first_result_setsys.dm_exec_describe_first_result_set_for_object

ใช่

วิธีเดียวในการจับข้อมูล - ชุดข้อมูลเมตาดาต้าและแม้แต่ผลลัพธ์ - สำหรับชุดผลลัพธ์ 2 - n คือผ่านรหัสแอปพลิเคชัน ครั้งแรกที่คุณจะดำเนินการค้นหา / เก็บขั้นตอน (s) โดยใช้SqlCommand.ExecuteReader (CommandBehavior)กับCommandBehaviorKeyInfoของ จากนั้นคุณสามารถรับชุดข้อมูลเมตาดาต้าโดยใช้เมธอดSqlDataReader.GetSchemaTableและเรียกเมธอดSqlDataReader.NextResultเพื่อวนไปตามชุดผลลัพธ์ เพิ่งทราบว่าในขณะที่การทำเช่นนี้รหัสผ่าน app ไม่ได้มีข้อ จำกัด ของการไม่ได้ทำงานกับแบบไดนามิก SQL และตารางชั่วคราวก็ไม่จริงเรียกใช้รหัส SQL และถ้าคุณมีงบดราก้อนและเพียงต้องการผลชุด meta ข้อมูลโดยไม่ทำให้เกิดการเปลี่ยนแปลงข้อมูลใด ๆ แล้วคุณจะต้องห่อ SQL ที่คุณกำลังทดสอบใน/BEGIN TRANROLLBACK TRAN

ประเภทของแอปพลิเคชันอาจเป็นแอพ Windows ปกติ, แอพคอนโซล, เว็บแอพ ฯลฯ หรืออาจเป็นฟังก์ชั่น SQLCLR / ขั้นตอนการจัดเก็บ

สำหรับการทำเช่นนี้ผ่าน SQLCLR มีขั้นตอนการจัดเก็บอยู่แล้วซึ่งทำตามที่อธิบายไว้ที่นี่ มันถูกเรียกว่าDB_DescribeResultSetsและเป็นส่วนหนึ่งของห้องสมุดSQL # (ซึ่งฉันเป็นผู้เขียนและในขณะที่มีรุ่นฟรี DB_DescribeResultSets มีเฉพาะในเวอร์ชั่นเต็ม)

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