powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Значение переменной по её имени ?
25 сообщений из 25, страница 1 из 1
Значение переменной по её имени ?
    #32009170
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет Всем!

Имеется обыкновенная процедура. Внутри неё объявляется переменная, скажем так
DECLARE @p1 varchar(10)
SET @p1 = 'xxx'
.
.
.
Далее имеется 2-ая переменная, которой присваивается имя 1-ой переменной
DECLARE @p2 varchar(10)
SET @p2 = '@p1'
.
.
.

ВОПРОС
Можно ли на основаниии переменной @p2 получить значение @p1 в 3-ю переменную ?



PS
SQL2000
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32009174
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это типа сделать указатель, а потом его разыменовать ? ))))
Люди, что ж вы с сиквелом-то пытаетесь делать ?!! Ну это же не сишник! Glory, это не к вам конкретно относится, это вообще крик души после регулярного чтения данного форума...
А можно вопрос - для какой задачи понадобился такой вот изврат ? Нет, не так - такой ИЗВРАТ ?
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32009175
andy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Опишите задачу поподробнее, потому что желание очень странное, думается, что лучше сделать как-либо по другому.

Напрямую сделать это нельзя, потому что sp_executesql и т.п. выполняются в своем контесте и не видят переменных объявленных у вас в коде.
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32009178
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Andy: вообще-то можно передать в sp_executesql параметры, в том числе и переменные, объявленные во внешнем коде, например,

declare @t int
set @t = 123
exec sp_executesql N'select @t', N'@t int', @t = @t

Можно их и выходными сделать, достаточно указать out при вызове sp_executesql.
exec sp_executesql N'select @t', N'@t int out ', @t = @t out

Правда, решению задачи Glory это не поможет.
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32009213
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А задача в следующем

Необходимо отслеживать запуски хранимых процедур с целью сбора стастики(в отдельную таблицу) о том, с какими параметрами они запускались. Можно конечно прописать все это непосредственно для каждой процедуры, но если девелопер поменяет что-то в параметрах, то ....

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

Если я копаю не в том направлении и есть более легкие способы достичь нужного мне результата, то буду очень признателен за идеи и подсказки
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32009236
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Profiler не поможет ? Там есть возможность записи лога в таблицу. И если его настроить поточнее, то в логе будет не так много лишней информации.
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32009267
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал Profiler
1. Все равно придется устраивать разбор строки запуска процедуры
2. Странно, но для Application под именем JSQL (это Java приложение соединяется через JDBC) событие SP:Starting наступает, а информации в TextData нет - т.е. не понятно даже какая процедурв запускается

Так что роблема не в лишней информации, а как раз в её отсутствии
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32009277
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как оформлен запуск: как CMD или RPC? Просто RPC-это для сервера отдельный класс событий.
Раньше Вашу задачу рещить было бы достаточно просто. Но где, где теперь SRV_HANDLE() or SRV_PRE_HANDLE()???
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32009375
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я знаю, как CMD. Правда developer сказал, что этот "класс от 3-го производителя". Да и я ведь отслеживаю событие SP:Starting, в а не RPC:Starting.

Кстати, вот в BOL нашел
"srv_paramdata
Returns the value of a remote stored procedure call parameter.



Important This Open Data Services function or macro is only supported in Microsoft® SQL Server™ 2000 for backward compatibility.


For more information about Open Data Services functions or macros supported for backward compatibility, see Open Data Services (Level 3).

Syntax
void * srv_paramdata (
SRV_PROC * srvproc,
int n );

Arguments
srvproc

Is a pointer to the SRV_PROC structure that is the handle for a particular client connection (in this case, the handle that received the remote stored procedure call). The structure contains information the ODS Library uses to manage communication and data between the Open Data Services server application and the client.

n

Is the number of the parameter. The first parameter is number 1.

Returns
A pointer to the parameter value. If the nth parameter is NULL, there is no nth parameter, or there is no remote stored procedure, returns NULL. If the parameter value is a string, it might not be null-terminated. Use srv_paramlen to determine the length of the string.

This function returns the following values, if the parameter is one of the SQL Server data types. Pointer data includes whether the pointer for the data type is valid (VP), NULL, or not applicable (N/A), and the contents of the data pointed to.
"

Это вообще к чему относится - надо что ли свою .dll(или еще чего нибудь подобное) создавть и регистрировать как extended stored procedure ?
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32009378
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это совсем из другой оперы - создание extended stored proc. В сиквеле поддерживается возможность подключения продедур, написанных на других языках (например, С). Ваяешь dll'ку, в ней пишешь функцию, в которой по определенным соглашениям работаешь с данными, экпортируешь эту функцию и юзаешь ее в сиквеле как обычную stored proc. Короче, к вашей проблеме это не имеет никакого отношения.
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32009382
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Популярно:
До 2000 был ODS, теперь это только Extended Proc's. При выполнении запроса к серверу обрабатываются либо событие Language, либо RPC. Раньше Вы могли "навесить" свой обработчик события, к-ый, например, мог вести журнал. Как он был бы оформлен: в виде XP или ЕХЕ - почти всё равно. Разбор события RPC гораздо проще, тем более, Вы видите, что работа с параметрами вынесена в отдельные функции.
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32009400
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fompro, а Вы не подскажете, где в BOL почитать про свой обработчик события - как он пишется и куда его, собственно, цеплять ? Как это делается в dblibrary, я представляю. Но как такой обработчик повесить на сервер, чтобы он как профайлер ловил события ?
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32009409
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как пользоваться Profiler-ом достаточно подробно описано в книжке Мамаева. На стр.760 описано, как создать события, определяемые пользователем. Вкратце - делается это с помощью sp_generateevent [@eventid=] event_id, [, [ @userinfo=] 'user_info', [, [ @userdata=] userdata].
@eventid задается в пределах 82-91, что соответствует диапазону UserConfigurable 0-9.
Два остальных параметра (nvarchar(12 и varbinary(8000) ) - произвольная информация для трассировки, выводимая в окне Profiler.
Ловить эти события в Profiler нужно в категории UserConfigurable.
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32009410
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ради бога извините, влепил постинг не в ту ветку...
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32009411
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да нет же, оказывается, в ту... Мой постинг - ответ на вопрос GreenSunrise. Просто обсуждение уже зашло далеко от темы изначально заданного вопроса...
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32009480
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Повторюсь - OPENDS60.DLL, включённая в 2000-к эти возможности не поддкрживает.
2. BOL особенно-то не расписывает КАК надо делать, там указано ЧЕМ пользоваться. Лучше всего посмотреть примеры ODS: Procsrv & Gateway. BOL опять-таки 6.5 или 7.0 Посмотрите "Event Management"
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Значение переменной по её имени ?
    #32063370
Nastasia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Glory :


"...
Необходимо отслеживать запуски хранимых процедур с целью сбора стастики(в отдельную таблицу) о том, с какими параметрами они запускались. Можно конечно прописать все это непосредственно для каждой процедуры, но если девелопер поменяет что-то в параметрах, то ...."

Glory , napishite pls chto y vac polychilos" ,
y menia ta she problema
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32063447
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пришлось повторить в каждой процедуре блок записи в лог-таблицу и обязать программистов при исправлении процедуры исправлять и эту часть
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32063731
Nastasia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a pochemy ne ispol"zovali

srv_paramdata


ili sp_trace_generateevent , sp_trace_create etd ?
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32063735
vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
B зачем так насиловать SQL сервер?
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32063774
Фотография akuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение в общем-то правильное.

Но заставить программистов, что либо делать правильно, задача практически невыполнимая. :)

Можно поступить так.
Сделать процедуру, которая пробегает по syscomments и достаёт оттуда текст процедур.
Далее она парсит процедуру на предмет комментариев с фиксированным текстом, например
--begin audit
--end audit
Всё, что необходимо для аудита формируется на основании sysobjects и syscolumns и пихается между этими комментариями.
Далее полученный текст запускается на исполнение через EXECUTE().
Лучше всего поставить эту процедуру в job и запускать где-то в районе 6:00, когда все программисты и пользователи уже спят. :)
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32063800
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Nastasia
a pochemy ne ispol"zovali
srv_paramdata


Потому-что решили использовать только T-SQL

ili sp_trace_generateevent , sp_trace_create etd ?
Получится то же самое, т.е. все равно в каждой процедуре нужно добавить вызов уже sp_trace_generateevent

2akuz
Можно чуть попроще. Т.к. лог это две таблицы, первая с именем процедуры (и др.данными), а вторая - входные параметры с их значениями, то остается просто сравнить вызов процедуры с INFORMATION_SCHEMA.PARAMETERS на предмет различий.
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32063875
Фотография akuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glory, Вам конечно видней. :)
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32063884
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
повесь тригер на sysobjects....
отслеживай создание процедур....
пересоздавай процки с имя_процедуры;2
создай свою с таким же именем и параметрами
и в тексте вызывай имя;2.....
...
Рейтинг: 0 / 0
Значение переменной по её имени ?
    #32065602
Nastasia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yvashaemie Guru !

y menia poxoshaia problema , no
problema v tom chto est' interaface gde vibitaytcia
imena SP dlia audita ( nyshno polychit" table Audit s sp names and
parameters (value called )


ne kak ne mogy razobratcia kak mne zapicivat' v Audit
ne vce vizivaemie proceduri a tol'ko te chto zaprocil dlia audita
user .




P.S profiler reshili ne ispol'zovat' , xotia rabotaet xorosho :)
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Значение переменной по её имени ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]