SQL Server SET FMTONLY устарел. Как вы получаете структуру нескольких наборов результатов?
Я понимаю, после SQL Server 2012 SET FMTONLY будет устаревшим. Я разработал сложную систему генерации кода, которая анализирует результаты хранимой процедуры и генерирует код C# для репозитория, контрактов данных и бизнес-библиотеки. Я использую SET FMTONLY, чтобы проанализировать набор (ы) хранимых процедур, чтобы понять, как сгенерируется хранимый процесс. Этот контракт генерируется в интерфейсе и его реализации. Я могу взять хранимую процедуру, возвращающую несколько наборов записей и вернуть данные в качестве контракта данных клиенту.
Я не могу найти замену SET FMTONLY, которая анализирует все наборы результатов для сохраненного процесса. Кто-нибудь знает, как я могу получить столбцы, типы данных и т. Д. Для каждого набора результатов для сохраненного процесса?
Спасибо за вашу помощь.
1 ответ
SET FMTONLY ON имеет недостатки, так как считает все операторы SELECT безусловными. Замены sp_describe_first_result_set и sp_describe_first_result_set_for_object заменяют только метаданные для первого набора результатов, поэтому они не будут работать в вашей ситуации. Эти процедуры также вызывают ошибку в случае нескольких результатов с несовместимыми метаданными.
Я предлагаю вам получить метаданные в вашем коде C#, фактически выполнив процедуры для вновь созданной и развернутой базы данных, используя методы SqlDataReader для извлечения метаданных. Этот метод также хорошо обрабатывает динамический SQL. Единственный случай, когда такой подход проблематичен, это когда контракт данных изменяется в зависимости от переданных значений, что в любом случае является проблемой проектирования.