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

К примеру есть процедура
A с параметрами a1, a2

процедура B с параметрами b1, b2,b3

Необходимо внутри каждой процедуры перебрать все ее входные переменные и записать в строку.

Что-то вроде снифинга входных параметров.

На выходе получить.

При exec dbo.a @a1= 1, @a2 = 'a'

получить строку varchar в формате @a1= 1, @a2 = 'a'

и т.д.
1 июл 16, 11:39    [19358566]     Ответить | Цитировать Сообщить модератору
 Re: Список значений у процедур  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
список_параметров,

sys.parameters все параметры, перебирайте смотрите на тип и извращайтесь

зы даже не хочу знать зачем вам это...как только люди не извращаются...
1 июл 16, 11:53    [19358646]     Ответить | Цитировать Сообщить модератору
 Re: Список значений у процедур  [new]
список_параметров
Guest
TaPaK, нужен аудит запуска процедур на SQL2005, чтобы писался в таблицу логов с теми параметрами с которыми процедура запускалась.
1 июл 16, 11:58    [19358669]     Ответить | Цитировать Сообщить модератору
 Re: Список значений у процедур  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
список_параметров,

"процедуру или функцию, которую можно будет вставлять внутри каждой процедуры"

так не получится. чтобы получить значение переменной или параметра, к нему надо обратиться явно по имени.
разве что, сами тексты процедур динамически подправлять (прогнать скрипт по существующим, а для новых - в ddl-триггере).
1 июл 16, 12:04    [19358707]     Ответить | Цитировать Сообщить модератору
 Re: Список значений у процедур  [new]
список_параметров
Guest
SELECT *
FROM sys.parameters
WHERE [object_id] = OBJECT_ID('proc1')

Получил на выходе:
1157487798 @a1 1
1157487798 @a2 2
1157487798 @a3 3
1157487798 @a4 4

Теперь вот думаю как бы в динамику это прикрутить чтобы сформировать что-то вроде

select '@a1=' + cast(@a1 as varchar) + '@a2=' + cast(@a2 as varchar)
1 июл 16, 12:07    [19358726]     Ответить | Цитировать Сообщить модератору
 Re: Список значений у процедур  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
список_параметров
Теперь вот думаю как бы в динамику это прикрутить чтобы сформировать что-то вроде
в FAQ-е посмотрите там есть примеры (например через for xml)
1 июл 16, 12:17    [19358790]     Ответить | Цитировать Сообщить модератору
 Re: Список значений у процедур  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
список_параметров
TaPaK, нужен аудит запуска процедур на SQL2005, чтобы писался в таблицу логов с теми параметрами с которыми процедура запускалась.
Паранойя.
За 20 с лишним лет, что я имею дело с базами MSSQL, такого не потребовалось ни разу.
Вот изменения в критически важных таблицах - это да, логируем.
Кроме того, есть же система прав доступа.
1 июл 16, 12:23    [19358824]     Ответить | Цитировать Сообщить модератору
 Re: Список значений у процедур  [new]
o-o
Guest
Дедушка
список_параметров
Теперь вот думаю как бы в динамику это прикрутить чтобы сформировать что-то вроде
в FAQ-е посмотрите там есть примеры (например через for xml)

daw правильно написал, только править сам код внутри процедуры.
как вы собираетесь из
"процедуры или функции, которую можно будет вставлять внутри каждой процедуры"
обращаться ко *внешним* по отношению к самой процедуре/функции параметрам?
1 июл 16, 12:28    [19358866]     Ответить | Цитировать Сообщить модератору
 Re: Список значений у процедур  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
список_параметров,

зачем что-то перебирать - редактируете процедуру, копипаст параметров, типы выбрасываете, запросом for xml добавляете в журнал.
Вообще баловство это для каждой процедуры... В целях отладки разве что.
1 июл 16, 13:37    [19359336]     Ответить | Цитировать Сообщить модератору
 Re: Список значений у процедур  [new]
список_параметров
Guest
Нужен механизм, который позволит доставать параметры со значениями в любой процедуре.

Сейчас столкнулся с тем, что непонятно как передать в динамику значения из процедуры, если есть список этих параметров. Возможно это и невозможно :(

DECLARE @a1 INT
DECLARE @a2 int

SET @a1 = 1
SET @a2 = 2

DECLARE @listparams TABLE (param VARCHAR(100))

INSERT INTO @listparams
SELECT '@a1'
UNION
SELECT '@a2'

DECLARE @sqlt NVARCHAR(4000)
SET @sqlt = 'select @a1'

EXEC sp_executesql @sqlt, N'@a1 int OUTPUT'


Так конечно же ругается
The parameterized query '(@a1 int OUTPUT)select @a1' expects the parameter '@a1', which was not supplied.

EXEC sp_executesql @sqlt, N'@a1 int OUTPUT', N'@a1'

А так конечно же на экране показывает просто @a1, а не значение этой переменной
1 июл 16, 14:38    [19359794]     Ответить | Цитировать Сообщить модератору
 Re: Список значений у процедур  [new]
o-o
Guest
повторю в третий раз, в четвертый не буду.
никакая внутренняя процедура/функция/динамика никак внешние параметры ны выгребет.
это внешняя процедура должна их передать.
возвращаемся к ответу
daw
список_параметров,

"процедуру или функцию, которую можно будет вставлять внутри каждой процедуры"

так не получится. чтобы получить значение переменной или параметра, к нему надо обратиться явно по имени.
разве что, сами тексты процедур динамически подправлять (прогнать скрипт по существующим, а для новых - в ddl-триггере).
1 июл 16, 15:32    [19360198]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить