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

Откуда: Вологда
Сообщений: 190
Здравствуйте!

1.) Например, sp_lock возвращает следующие поля:

spid/smallint
dbid/smallint
ObjId/int
...

Как мне получить типы возвращаемых значений ?
select * from sp_lock вернет таблицу с данными - а я хотел бы например, пробежаться по возвращаемым типам процедуры и на их основании динамически создать временную таблицу

2.) А вот ф-я sp_lock вообще вызывается через EXEC

CREATE TABLE #LOCK_01_01
(
spid INT,
dbid INT,
ObjId INT,
IndId SMALLINT,
Type VARCHAR(20),
Resource VARCHAR(50),
Mode VARCHAR(20),
Status VARCHAR(20)
)

INSERT INTO #LOCK_01_01

EXEC sp_lock

Тут как поступить ?

Спасибо за внимание.
3 июн 14, 12:06    [16111565]     Ответить | Цитировать Сообщить модератору
 Re: Как получить типы возвращаемых данных хранимой процедурой ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alex_MA
а я хотел бы например, пробежаться по возвращаемым типам процедуры

На стороне сервера ?
3 июн 14, 12:24    [16111763]     Ответить | Цитировать Сообщить модератору
 Re: Как получить типы возвращаемых данных хранимой процедурой ?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
в чем вопрос собственно то ?
3 июн 14, 12:38    [16111900]     Ответить | Цитировать Сообщить модератору
 Re: Как получить типы возвращаемых данных хранимой процедурой ?  [new]
Alex_MA
Member

Откуда: Вологда
Сообщений: 190
Glory
Alex_MA
а я хотел бы например, пробежаться по возвращаемым типам процедуры

На стороне сервера ?


на стороне сервера
3 июн 14, 13:59    [16112647]     Ответить | Цитировать Сообщить модератору
 Re: Как получить типы возвращаемых данных хранимой процедурой ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Alex_MA
Glory
пропущено...

На стороне сервера ?


на стороне сервера

На сервере нигде не хранится информация о возвращаемых процедурой результатах.
Поэтому не получится "пробежаться по возвращаемым типам процедуры и на их основании динамически создать временную таблицу".
3 июн 14, 14:09    [16112750]     Ответить | Цитировать Сообщить модератору
 Re: Как получить типы возвращаемых данных хранимой процедурой ?  [new]
Alex_MA
Member

Откуда: Вологда
Сообщений: 190
Glory
Alex_MA
пропущено...


на стороне сервера

На сервере нигде не хранится информация о возвращаемых процедурой результатах.
Поэтому не получится "пробежаться по возвращаемым типам процедуры и на их основании динамически создать временную таблицу".


Понятно. Спасибо.
3 июн 14, 14:12    [16112789]     Ответить | Цитировать Сообщить модератору
 Re: Как получить типы возвращаемых данных хранимой процедурой ?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
если сильно невмоготу - то никто не запрещает заглянуть внутрь половины процедур .. посмотреть что они возращают, сделать таблицу ,инсерт екзек и бегать себе по результатам... если я опять же правильно понял суть вопроса
3 июн 14, 14:15    [16112822]     Ответить | Цитировать Сообщить модератору
 Re: Как получить типы возвращаемых данных хранимой процедурой ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7764
Банально прочесть справку. Там все типы расписаны.
3 июн 14, 14:22    [16112894]     Ответить | Цитировать Сообщить модератору
 Re: Как получить типы возвращаемых данных хранимой процедурой ?  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2791
Сначала:
exec sp_addlinkedserver @server = N'loopback',
    @srvproduct = N'',
    @provider = N'SQLOLEDB', 
    @datasrc = @@servername

Потом:
SELECT * INTO sp_lock_tab FROM OPENQUERY(loopback, 'set fmtonly on exec sp_lock')
SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS  WHERE TABLE_NAME = 'sp_lock_tab'
GO
DROP TABLE sp_lock_tab
3 июн 14, 14:28    [16112947]     Ответить | Цитировать Сообщить модератору
 Re: Как получить типы возвращаемых данных хранимой процедурой ?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4738
Владислав Колосов
Банально прочесть справку. Там все типы расписаны.


Вы не поняли суть проблемы. Вопрос в том, как обернуть процедуру запросом не прибегая к ручному кодированию. И речь не идет о конкретной процедуре.
3 июн 14, 14:44    [16113033]     Ответить | Цитировать Сообщить модератору
 Re: Как получить типы возвращаемых данных хранимой процедурой ?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
a_voronin
Вопрос в том, как обернуть процедуру запросом не прибегая к ручному кодированию

без ручного кодирования - вам уже ответили,никак
3 июн 14, 14:45    [16113041]     Ответить | Цитировать Сообщить модератору
 Re: Как получить типы возвращаемых данных хранимой процедурой ?  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Довольно очевидно, что обобщеннная процедура может возвращать разные resultset-ы в зависимости от параметров/фаз луны/etc.
Поэтому считать, что у любой процедуры обязан быть фиксированный возвращаемый resultset и главное каким-то образом выцепить из сервера его описание - просто идеологически неправильно.
3 июн 14, 15:20    [16113386]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как получить типы возвращаемых данных хранимой процедурой ?  [new]
amr-now
Member

Откуда:
Сообщений: 3
Начиная с SQL Server 2012, можно получить мета-информацию о первом ResultSet-е:

DECLARE @sql NVARCHAR(MAX) = 'EXEC sp_lock'
SELECT *
FROM sys.dm_exec_describe_first_result_set(@sql, NULL, 0)

Третий параметр функции может принимать значения 0, 1, 2.
1 май 17, 19:15    [20448290]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить