Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 как получить список выводимых полей хранимой процедуры  [new]
PG81
Member

Откуда: Тверь
Сообщений: 879
Есть например процедура
create proc dbo.ClientList@ID int as
begin
  select 
    C.ID
    C.Name
    C.Phone
    C.Email
  from Client C
end

как получить список выводимых полей хранимой процедуры
19 фев 15, 09:36    [17285481]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104764
PG81
как получить список выводимых полей хранимой процедуры

Получить где - на клиенте или на сервере ?
19 фев 15, 09:38    [17285490]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
PG81
Member

Откуда: Тверь
Сообщений: 879
сорри нужен sql запрос к системным таблицам
19 фев 15, 09:40    [17285499]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
хмхмхм
Guest
PG81,

select * from sys.parameters as p
where p.object_id = object_id('schema.proc')
19 фев 15, 09:44    [17285514]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
хмхмхм
PG81,

select * from sys.parameters as p
where p.object_id = object_id('schema.proc')
При чём здесь параметры?
А если процедура возвращает несколько датасетов?
19 фев 15, 09:50    [17285541]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
PG81
Member

Откуда: Тверь
Сообщений: 879
iap,

об этом я не подумал, но по идее предполагается, что процедура возвращает только один датасет
19 фев 15, 09:54    [17285558]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104764
PG81
но по идее предполагается, что процедура возвращает только один датасет

Т.е. сервер должен запрещать создание процедур, которые возвращают множество наборов ?
19 фев 15, 09:55    [17285567]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
iap
Member

Откуда: Москва
Сообщений: 46953
PG81
iap,

об этом я не подумал, но по идее предполагается, что процедура возвращает только один датасет
Но параметры-то по-любому здесь не при чём.
Надо же узнать поля датасетов.
На клиенте, кстати, это всё можно сделать. В компонентах ADO, например.
19 фев 15, 09:57    [17285578]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
PG81
как получить список выводимых полей хранимой процедуры
Зачем?
Чтобы динамически построить таблицу и положить в нее результата выполнения процедуры?
19 фев 15, 10:07    [17285630]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
PG81
Member

Откуда: Тверь
Сообщений: 879
invm,

да именно так. Но там все несколько сложнее.
В БД есть описание форм, датасетов, полей и как все это взаимодействует между собой. По этому описанию динамически создаются формы и все их содержимое. При создании пользователем описания полей, чтобы самому поштучно не добавлять поля, реализована процедура которая открывает датасет, смотрит какие там поля и создает их описания в БД. Потом уже пользователь может вводить дополнительные свойства этих полей.

Я решил переделать этот механизм и найти возможность добавления описания полей процедурой в БД без открывания датасета, если это возможно конечно.
19 фев 15, 10:22    [17285734]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
PG81
Member

Откуда: Тверь
Сообщений: 879
Glory,

наверное нет необходимости запрещать несколько датасетов
у меня среди сотен процедур в БД нет ни одной где бы использовалась такая возможность.
Но если вдруг такая появится, то может просто список полей первого датасета
19 фев 15, 10:26    [17285757]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104764
PG81
наверное нет необходимости запрещать несколько датасетов
у меня среди сотен процедур в БД нет ни одной где бы использовалась такая возможность.

Тогда почему вы не создаете объекты, которые по своей изначальной природе всегда возвращают один, заранее определенный набор ? Что и позволяет иметь информацию об этом наборе в системных таблицах
19 фев 15, 10:28    [17285764]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
PG81
Member

Откуда: Тверь
Сообщений: 879
Glory,

так вот именно такие хранимки и делаю
автор
Что и позволяет иметь информацию об этом наборе в системных таблицах

у меня как раз вопрос как получить эту информацию запросом SQL?
19 фев 15, 10:32    [17285782]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104764
PG81
так вот именно такие хранимки и делаю

Еще раз
Хранимая процедура может возвращать много наборов. И ваше личное обязательство не возращать больше одного набора ничего не меняет.

PG81
у меня как раз вопрос как получить эту информацию запросом SQL?

Для объектов, которые могут возаращать только один набор по своей приводе, информация о столбцах хранится в sys.columns
19 фев 15, 10:35    [17285807]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
PG81
Member

Откуда: Тверь
Сообщений: 879
Glory,

select c.name, c.length from syscolumns c
join sysobjects o on o.id = c.id
where o.name = 'ProcName'

Этот запрос возвращает список параметров процедуры
19 фев 15, 10:43    [17285862]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104764
PG81
Этот запрос возвращает список параметров процедуры

Вы ответы читаете вообще ?
19 фев 15, 10:46    [17285883]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
хмхмхм
Guest
iap,

сорри, с утра видимо не проснулся. Показалось, что автор спрашивал именно про параметры.
19 фев 15, 10:48    [17285901]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
PG81
Member

Откуда: Тверь
Сообщений: 879
Glory,
автор
Для объектов, которые могут возвращать только один набор по своей приводе, информация о столбцах хранится в sys.columns

попробовал такой запрос
select * from sys.columns c
join sysobjects o on o.id = c.object_id
where o.name = 'ProcLst'

Выдает пусто. Видимо что-то делаю не так.
Отсюда вопросы
1.Что значит объекты, которые могут возвращать только один набор по своей природе?как-то по особенному делать хп или что?
2.Что я делаю не так или где я не внимательно прочитал что-то прочитал ответы?
19 фев 15, 10:55    [17285927]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
PG81,

Для 2012 и выше - sp_describe_first_result_set
19 фев 15, 10:55    [17285929]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
хмхмхм
Guest
PG81,

Можно попробовать поковыряться в тексте процедуры, возвращаемым запросом:
EXEC sp_helptext 'schema.proc';
19 фев 15, 10:55    [17285930]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104764
PG81
Отсюда вопросы
1.Что значит объекты, которые могут возвращать только один набор по своей природе?как-то по особенному делать хп или что?

Это те объекты, в которых физически невозможно написать возврат нескольких наборов.
Потому что это будет нарушением синтаксиса.
19 фев 15, 10:57    [17285937]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а помоему ТС пошел по пути потыки написать очередной "совершенно независимый код" со все5ми вытекающими....
19 фев 15, 10:57    [17285940]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4903
PG81,
CREATE procedure AAA(@n nvarchar(123)) as
select 1 as one,'333' as two;
select 'dddd' as one, @n two;

SET FMTONLY ON;

exec AAA 'www'

SET FMTONLY OFF;
19 фев 15, 12:45    [17286772]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Maxx
а помоему ТС пошел по пути потыки написать очередной "совершенно независимый код" со все5ми вытекающими....
как вариант - выполнить процедуру, получить датасет, зачитать поля и их типы. Будет независимо.
Можно даже узнать сколько датасетов у ХП.
19 фев 15, 12:57    [17286875]     Ответить | Цитировать Сообщить модератору
 Re: как получить список выводимых полей хранимой процедуры  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
LSV
как вариант - выполнить процедуру, получить датасет, зачитать поля и их типы. Будет независимо.
Можно даже узнать сколько датасетов у ХП.

я откровенно не разделяю ваш "оптимизм" по поводу таких систем...
Зачем ето пытаються делать - язнаю, НО пратическое применение такого - в моем понимаю ето производная между граблефабрикой и условно поддерживаемым кодом. Не стоит пытать рожать "ООП" на скл, не его ето стихия. Опять же -все ето мое скромное имхо
19 фев 15, 13:04    [17286949]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить