Получите столбцы результатов из StoredProc без его выполнения, используя Microsoft.SqlServer.Management.Smo - PullRequest
3 голосов
/ 17 января 2009

Я хочу получить список наборов результатов и столбцов, которые я могу ожидать от SP. Мне удалось получить параметры, сценарий ... но я не знаю, где можно найти наборы результатов и имена столбцов.

using Microsoft.SqlServer.Management.Smo;

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["mydbconn"].ConnectionString))
        {
            conn.Open();
            Server sv = new Server(new Microsoft.SqlServer.Management.Common.ServerConnection(conn));
            Database db = sv.Databases["mydb"];

            foreach (StoredProcedure sp in db.StoredProcedures)
            {
                string[] columns = sp.??????
            }

        }

Есть ли способ добраться до колонн? В конечном итоге я пытаюсь написать генератор кода для автоматизации моих объектов доступа к данным. Спасибо ТАК!

РЕДАКТИРОВАТЬ: «Другое решение, если вы можете получить значение ScalarResult, вы можете преобразовать его во что-то полезное, что вы можете извлечь столбцы из.» : Есть идеи, как это сделать?

Ответы [ 3 ]

6 голосов
/ 17 января 2009

Это известная трудная область. Некоторые системы пытаются сделать это, выполняя хранимую процедуру с включенным SET FMTONLY ON, но это имеет ряд проблем (то есть все равно будет выполняться некоторый код, который может быть плохим). Общеизвестно, что сложно получить схему для нетривиальных запросов (например, когда разные ветви делают разные выборки).

Если вы знаете , что процедуры не имеют побочных эффектов и не SELECT в ветвях, попробуйте трюк SET FMTONLY ON - но, по крайней мере, поймите возможное влияние.

Для запросов в некоторых случаях табличные функции (UDF) могут быть более практичными, поскольку схема формализована.

2 голосов
/ 17 января 2009

После просмотра страницы участников StoredProcedure (http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.storedprocedure_members.aspx) в MSDN я вижу два возможных решения.

Во-первых, вы можете использовать GetTextBody, чтобы получить реальный скрипт для хранимой процедуры. После этого вы можете как-то разобрать хранимые процедуры. Предполагая, что они были созданы и могут быть изменены вами или членом вашей команды разработчиков (если у вас есть), это может быть немного проще. Если нет, то это будет очень грязно, очень быстро и не будет на 100% ... так что я НЕ ДЕЙСТВИТЕЛЬНО рекомендую это.

Другое решение: если вы можете получить значение ScalarResult, вы сможете преобразовать его во что-то полезное, из чего вы сможете извлечь столбцы.

Изменить: Если вы хотите получить только параметры для SP, это было бы относительно легко сделать. Существует (согласно предыдущей ссылке) коллекция с именем Parameters, к которой вы можете получить доступ.

0 голосов
/ 09 апреля 2012

Я знаю, что Марк давно ответил на этот вопрос. Но с появлением Visual Studio 11 на горизонте SMO также значительно выросла.

Каждый объект StoredProcedure в SMO теперь имеет список параметров.

Из MSDN:

Параметры. Представляет коллекцию объектов StoredProcedureParameterCollection. Каждый объект StoredProcedureParameter представляет параметр, определенный для хранимой процедуры.

Ссылка MSDN здесь

Спасибо и С уважением

Gagan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...