Apakah ada prosedur untuk mengembalikan metadata untuk semua set hasil dalam prosedur tersimpan?
Tidak dan Ya.
Tidak
Tidak ada alat T-SQL murni untuk mengakses lebih dari hasil set pertama. Bahkan OPENROWSET dan OPENQUERY memiliki batasan yang sama:
Meskipun kueri mungkin mengembalikan beberapa set hasil, OPEN (ROWSET | QUERY) hanya mengembalikan yang pertama.
Sebagai catatan, saya tidak mengatakan atau menyiratkan bahwa ada alasan teknis umum untuk pembatasan ini. Saya hanya menunjukkan bahwa pembatasan tidak terbatas pada sp_describe_first_result_set
, sys.dm_exec_describe_first_result_set
, dan sys.dm_exec_describe_first_result_set_for_object
.
Iya
Satu-satunya cara untuk mengambil info - set hasil meta-data dan bahkan hasil - untuk set hasil 2 - n adalah melalui kode aplikasi. Anda pertama-tama akan menjalankan query / prosedur tersimpan dengan menggunakan SqlCommand.ExecuteReader (CommandBehavior) dengan CommandBehavior dari KeyInfo
. Kemudian, Anda bisa mendapatkan hasil set meta-data menggunakan metode SqlDataReader.GetSchemaTable , dan memanggil metode SqlDataReader.NextResult untuk menggilir set hasil. Hanya perlu diingat bahwa saat melakukan ini melalui kode aplikasi tidak memiliki batasan untuk tidak bekerja dengan Dynamic SQL dan tabel sementara, itu benarsebenarnya menjalankan kode SQL, dan jika Anda memiliki pernyataan DML dan hanya ingin hasilnya mengatur meta-data tanpa menyebabkan perubahan data, maka Anda harus membungkus SQL yang Anda uji dalam BEGIN TRAN
/ ROLLBACK TRAN
.
Jenis aplikasi dapat berupa Aplikasi Windows biasa, Aplikasi Konsol, Aplikasi Web, dll, atau bahkan dapat berupa fungsi / prosedur tersimpan SQLCLR.
Sehubungan dengan melakukan ini melalui SQLCLR, prosedur tersimpan sudah ada yang melakukan apa yang dijelaskan di sini. Ini disebut DB_DescribeResultSets dan merupakan bagian dari perpustakaan # SQL (yang saya penulis, dan sementara ada versi gratis, DB_DescribeResultSets hanya tersedia dalam versi lengkap).