Схема из хранимой процедуры - PullRequest
3 голосов
/ 28 апреля 2011

У меня есть процедура, я хочу прочитать схему процедуры.Для получения схемы просмотра я использую запрос, показанный здесь.Таким же образом я хочу получить схему хранимой процедуры.Как получить его?Пожалуйста, покажите синтаксис.

public static DataTable SchemaReader(string tableName)
{
     string sql = string.Format("Select * from {0}", tableName);
     conn.Open();
     SqlCommand cmd = new SqlCommand(sql, conn);
     cmd.CommandType = CommandType.Text;
     SqlDataReader reader = cmd.ExecuteReader();

     DataTable schema = reader.GetSchemaTable();

     reader.Close();
     conn.Close();
     return schema;
}       

Если есть какие-либо вопросы, пожалуйста, спросите. Заранее спасибо.

Ответы [ 5 ]

8 голосов
/ 28 апреля 2011

Вы могли бы сделать

public static DataTable SchemaReader(string tableName) 
{      
  string sql = "MySP";//replace this with your store procedure name      
  conn.Open();      
  SqlCommand cmd = new SqlCommand(sql, conn);
  cmd.CommandType = CommandType.StoredProcedure;      
  SqlDataReader reader = cmd.ExecuteReader();       
  DataTable schema = reader.GetSchemaTable();       
  reader.Close();      
  conn.Close();      
  return schema; 
}

Надеюсь, эта помощь

4 голосов
/ 16 апреля 2015

Это ответ, который не вызывает SP - , если вы это сделаете, вы можете случайно повлиять на данные :

SELECT * FROM sys.dm_exec_describe_first_result_set ('owner.sprocName', NULL, 0) ;

Возвращает набор результатов:

is_hidden
column_ordinal 
name
is_nullable 
system_type_id 
system_type_name    
max_length 
precision 
scale 
collation_name      
user_type_id 
user_type_database  
user_type_schema    
user_type_name      
assembly_qualified_type_name
xml_collection_id 
xml_collection_database
xml_collection_schema  
xml_collection_name    
is_xml_document 
is_case_sensitive 
is_fixed_length_clr_type 
source_server   
source_database 
source_schema   
source_table    
source_column   
is_identity_column 
is_part_of_unique_key 
is_updateable 
is_computed_column 
is_sparse_column_set 
ordinal_in_order_by_list 
order_by_is_descending 
order_by_list_length 
error_number 
error_severity 
error_state 
error_message 
error_type  
error_type_desc
1 голос
/ 28 апреля 2011

Вы можете получить информацию о параметрах хранимой процедуры, но без ее выполнения SQL Server не сможет сообщить вам структуру наборов данных, возвращаемых хранимой процедурой. Поскольку выполнение хранимой процедуры может иметь побочные эффекты, ADO.NET не предоставляет метод для сообщения вам, как будут выглядеть наборы результатов, если бы хранимая процедура была выполнена. Кроме того, набор (ы) результатов может изменяться в зависимости от параметров, передаваемых процедуре при ее выполнении.

0 голосов
/ 05 мая 2014

Я создал различные генераторы кода, которые используют вывод хранимых процедур.По моему опыту, большинство процедур, которые выбирают что-либо из SELECT, выводят свою схему точно так же, если вы вызываете их со значением null (DbNull.Value) в качестве значения для всех параметров.Вы можете получить сам список параметров из системных представлений, хотя я нахожу удобным использовать INFORMATION_SCHEMA.PARAMETERS.

Выполняя процедуру в транзакции и всегда откатываясь, вы можете безопасно выполнять вещи, даже если вы не знаетечто делает процедура

Вероятно, вам понадобится базовый графический интерфейс и пользователь сможет изменять параметры - или файл конфигурации, или какой-либо другой способ предоставления значений параметров для определенных процедур.Хранимая процедура может выдавать выходные данные с различными схемами в зависимости от параметров, хотя я не видел многих, которые это делают.

0 голосов
/ 28 апреля 2011

Я не понимаю ваш вопрос ясно, я думаю, что это будет работать с вами

Select * 
from sys.objects 
where type='p' and name = (procedure name)

Замените ваш запрос этим, и он будет работать нормально

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