Saklı yordamdaki tüm sonuç kümeleri için meta veri döndüren bir yordam var mı?
Hayır ve evet.
Hayır
İlk sonuç kümesinden daha fazlasına erişmek için saf bir T-SQL aracı yoktur. OPENROWSET ve OPENQUERY bile aynı sınırlamaya sahiptir:
Sorgu birden çok sonuç kümesi döndürse de, OPEN (ROWSET | QUERY) yalnızca ilkini döndürür.
Kayıt için, bu sınırlamanın ortak bir teknik nedeni olduğunu ne söylüyorum ne de ima ediyorum. Sadece sınırlama ile sınırlı olmadığını işaret ediyorum sp_describe_first_result_set
, sys.dm_exec_describe_first_result_set
ve sys.dm_exec_describe_first_result_set_for_object
.
Evet
Sonuç kümeleri 2 - n için bilgi - sonuç kümesi meta verileri ve hatta sonuçlar - yakalamanın tek yolu uygulama kodudur. Önce kullanarak sorgular / saklı yordam (ler) yürütülür SqlCommand.ExecuteReader (CommandBehavior) bir ile CommandBehavior ait KeyInfo
. Ardından, sonuç kümesi meta verilerini SqlDataReader.GetSchemaTable yöntemini kullanarak ve sonuç kümeleri arasında dolaşmak için SqlDataReader.NextResult yöntemini çağırarak alabilirsiniz . Bunun için uygulama kodu aracılığıyla bunu Dinamik SQL ve geçici tablolarla çalışmıyor sınırlamalarını yok iken, bu akılda tutmak yaparSQL kodunu çalıştırırsanız ve DML deyimleriniz varsa ve yalnızca sonuç kümesi meta verilerini herhangi bir veri değişikliğine neden olmadan istiyorsanız, bir BEGIN TRAN
/ içinde test ettiğiniz SQL'i sarmanız gerekir ROLLBACK TRAN
.
Uygulama türü normal bir Windows Uygulaması, Konsol Uygulaması, Web Uygulaması vb. Olabilir veya bir SQLCLR işlevi / saklı yordamı bile olabilir.
Bunu SQLCLR ile yapmakla ilgili olarak, burada tarif edilenleri yapan saklı bir prosedür zaten mevcuttur. DB_DescribeResultSets olarak adlandırılır ve SQL # kitaplığının bir parçasıdır ( yazarım ve Ücretsiz bir sürüm varken, DB_DescribeResultSets yalnızca Tam sürümde mevcuttur).