มีขั้นตอนในการส่งคืนข้อมูลเมตาสำหรับชุดผลลัพธ์ทั้งหมดในกระบวนงานที่เก็บไว้หรือไม่
ไม่และใช่
ไม่
ไม่มี T-SQL ที่แท้จริงหมายถึงการเข้าถึงมากกว่าชุดผลลัพธ์แรก แม้แต่OPENROWSETและOPENQUERYก็มีข้อ จำกัด เหมือนกัน:
แม้ว่าเคียวรีอาจส่งคืนชุดผลลัพธ์หลายชุด OPEN (ROWSET | QUERY) จะส่งกลับเฉพาะชุดแรกเท่านั้น
สำหรับบันทึกนี้ฉันไม่ได้พูดหรืออ้างว่ามีเหตุผลทางเทคนิคทั่วไปสำหรับข้อ จำกัด นี้ ฉันเพียงแค่ชี้ให้เห็นว่าข้อ จำกัด ไม่ได้ จำกัด อยู่sp_describe_first_result_set
, และsys.dm_exec_describe_first_result_set
sys.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 TRAN
ROLLBACK TRAN
ประเภทของแอปพลิเคชันอาจเป็นแอพ Windows ปกติ, แอพคอนโซล, เว็บแอพ ฯลฯ หรืออาจเป็นฟังก์ชั่น SQLCLR / ขั้นตอนการจัดเก็บ
สำหรับการทำเช่นนี้ผ่าน SQLCLR มีขั้นตอนการจัดเก็บอยู่แล้วซึ่งทำตามที่อธิบายไว้ที่นี่ มันถูกเรียกว่าDB_DescribeResultSetsและเป็นส่วนหนึ่งของห้องสมุดSQL # (ซึ่งฉันเป็นผู้เขียนและในขณะที่มีรุ่นฟรี DB_DescribeResultSets มีเฉพาะในเวอร์ชั่นเต็ม)