birden çok sonuç kümesi için dm_exec_describe_first_result_set_for_object


9

Saklı yordamdaki tüm sonuç kümeleri için meta veri döndüren bir yordam var mı?

Bir şey sys.dm_exec_describe_first_result_set_for_object, ama tüm sonuç kümeleri için?

Sonunda, veritabanındaki her saklı yordamda her sonuç kümesi için meta verileri keşfetmek isteyeceğim. Şimdilik, sadece sys.dm_exec_describe_first_result_set_for_objecttarif edemeyen sonuç kümelerine razı olurum . Yani, 2., 3. ve N. Sonuç kümeleri.

Bunu şimdi yapmak için SQLCLR kullanmaya bakıyorum:

Birden fazla sonuç kümesi ile bir yordamın sonuçları nasıl kaydedilir
tSQLt - SQL Server için DB birim sınama - ResultSetFilter.cs


3
Hayır, SQL Server'da böyle bir şey yoktur, bunu yapmak için kod yazmanız gerekir (ve muhtemelen birçok durumda tahmin yapmanız gerekir).
Aaron Bertrand

Yanıtlar:


3

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_setve 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).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.