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

Откуда: ИТ-Олимп, 58.1-летний супермен
Сообщений: 3989
Дано

create proc usp_test
 @Prm	VARCHAR(50) = 'default'
AS
 SELECT * FROM Table

GO

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

Выполнение процедуры sp_sproc_columns 'usp_test' дает информацию о наименовании параметров, но откуда вытащить значение параметра по умолчанию (в данном примере default) ? Процедура sp_sproc_columns возвращает NULL в поле column_def.
20 дек 04, 15:52    [1194011]     Ответить | Цитировать Сообщить модератору
 Re: sp_sproc_columns  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
Парсить заголовок процедуры.
20 дек 04, 16:10    [1194095]     Ответить | Цитировать Сообщить модератору
 Re: sp_sproc_columns  [new]
Диченка
Member

Откуда: ИТ-Олимп, 58.1-летний супермен
Сообщений: 3989
jimmers
Парсить заголовок процедуры.


Не хотелось бы
20 дек 04, 16:10    [1194099]     Ответить | Цитировать Сообщить модератору
 Re: sp_sproc_columns  [new]
zass
Member

Откуда: Minsk
Сообщений: 1043
Может это:
default

Is a default value for the parameter. If a default is defined, the procedure can be executed without specifying a value for that parameter. The default must be a constant or it can be NULL. It can include wildcard characters (%, _, [], and [^]) if the procedure uses the parameter with the LIKE keyword.
20 дек 04, 16:15    [1194115]     Ответить | Цитировать Сообщить модератору
 Re: sp_sproc_columns  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5069
Не хотелось, конечно. Но это known bug - см. поиск по News в google
20 дек 04, 16:16    [1194124]     Ответить | Цитировать Сообщить модератору
 Re: sp_sproc_columns  [new]
Диченка
Member

Откуда: ИТ-Олимп, 58.1-летний супермен
Сообщений: 3989
zass
Может это:
default

Is a default value for the parameter. If a default is defined, the procedure can be executed without specifying a value for that parameter. The default must be a constant or it can be NULL. It can include wildcard characters (%, _, [], and [^]) if the procedure uses the parameter with the LIKE keyword.


Дык я "это" и указал в параметре хп. А в роусете от sp_sproc_columns "этого" не видать.
20 дек 04, 16:17    [1194132]     Ответить | Цитировать Сообщить модератору
 Re: sp_sproc_columns  [new]
Богдан Гоцкий
Member

Откуда: Львов
Сообщений: 504
Если взглянуть на код sp_sproc_columns, можно увидеть, что она постоянно возвращает COLUMN_DEF = convert(nvarchar(4000),NULL) не зависимо от входных параметров.

Могу предложить парсить syscomments.text
20 дек 04, 16:33    [1194202]     Ответить | Цитировать Сообщить модератору
 Re: sp_sproc_columns  [new]
Диченка
Member

Откуда: ИТ-Олимп, 58.1-летний супермен
Сообщений: 3989
Хорошо. В таком случае может у кого-нибудь есть скриптик, распарсивающий только параметры процедуры (не пробегая по всему телу процедуры) ?
20 дек 04, 16:43    [1194245]     Ответить | Цитировать Сообщить модератору
 Re: sp_sproc_columns  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31632
Диченко
Хорошо. В таком случае может у кого-нибудь есть скриптик, распарсивающий только параметры процедуры (не пробегая по всему телу процедуры) ?

На T-SQL вряд-ли у кого найдётся, не такая простая задача для него.
20 дек 04, 16:58    [1194313]     Ответить | Цитировать Сообщить модератору
 Re: sp_sproc_columns  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2423
Ну тогда может лучше как-нибудь так
create proc usp_test
 @Prm	VARCHAR(50) = 'default'
...
GO
exec sp_addextendedproperty 
	 @name = '@Prm_default_value' --по какой-нибудь простой мнемонике генерить
	,@value = 'default'
	,@level0type = 'user'
	,@level0name = 'dbo'
	,@level1type = 'procedure'
	,@level1name = 'usp_test'
	,@level2type = 'parameter'
	,@level2name = '@Prm'
Ну и потом
select value from ::fn_listextendedproperty('@Prm_default_value','user','dbo','procedure','usp_test','parameter','@Prm')
20 дек 04, 17:07    [1194348]     Ответить | Цитировать Сообщить модератору
 Re: sp_sproc_columns  [new]
Диченка
Member

Откуда: ИТ-Олимп, 58.1-летний супермен
Сообщений: 3989
LR
Ну тогда может лучше как-нибудь так
create proc usp_test
 @Prm	VARCHAR(50) = 'default'
...
GO
exec sp_addextendedproperty 
	 @name = '@Prm_default_value' --по какой-нибудь простой мнемонике генерить
	,@value = 'default'
	,@level0type = 'user'
	,@level0name = 'dbo'
	,@level1type = 'procedure'
	,@level1name = 'usp_test'
	,@level2type = 'parameter'
	,@level2name = '@Prm'
Ну и потом
select value from ::fn_listextendedproperty('@Prm_default_value','user','dbo','procedure','usp_test','parameter','@Prm')


Тоже вариант, спасибо, как раз его разбирал
20 дек 04, 17:25    [1194457]     Ответить | Цитировать Сообщить модератору
 Re: sp_sproc_columns  [new]
Богдан Гоцкий
Member

Откуда: Львов
Сообщений: 504
Интересно поправлен ли этот баг в Юконе?
21 дек 04, 11:55    [1195961]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить