Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Значение переменной по её имени ? / 25 сообщений из 25, страница 1 из 1
09.07.2001, 14:01:36
    #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
09.07.2001, 15:01:10
    #32009174
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение переменной по её имени ?
Это типа сделать указатель, а потом его разыменовать ? ))))
Люди, что ж вы с сиквелом-то пытаетесь делать ?!! Ну это же не сишник! Glory, это не к вам конкретно относится, это вообще крик души после регулярного чтения данного форума...
А можно вопрос - для какой задачи понадобился такой вот изврат ? Нет, не так - такой ИЗВРАТ ?
...
Рейтинг: 0 / 0
09.07.2001, 15:06:15
    #32009175
andy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение переменной по её имени ?
Опишите задачу поподробнее, потому что желание очень странное, думается, что лучше сделать как-либо по другому.

Напрямую сделать это нельзя, потому что sp_executesql и т.п. выполняются в своем контесте и не видят переменных объявленных у вас в коде.
...
Рейтинг: 0 / 0
09.07.2001, 15:23:11
    #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
10.07.2001, 07:05:06
    #32009213
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение переменной по её имени ?
А задача в следующем

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

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

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

Так что роблема не в лишней информации, а как раз в её отсутствии
...
Рейтинг: 0 / 0
10.07.2001, 17:02:42
    #32009277
Fompro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение переменной по её имени ?
Как оформлен запуск: как CMD или RPC? Просто RPC-это для сервера отдельный класс событий.
Раньше Вашу задачу рещить было бы достаточно просто. Но где, где теперь SRV_HANDLE() or SRV_PRE_HANDLE()???
...
Рейтинг: 0 / 0
11.07.2001, 15:22:46
    #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
11.07.2001, 15:39:30
    #32009378
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение переменной по её имени ?
Это совсем из другой оперы - создание extended stored proc. В сиквеле поддерживается возможность подключения продедур, написанных на других языках (например, С). Ваяешь dll'ку, в ней пишешь функцию, в которой по определенным соглашениям работаешь с данными, экпортируешь эту функцию и юзаешь ее в сиквеле как обычную stored proc. Короче, к вашей проблеме это не имеет никакого отношения.
...
Рейтинг: 0 / 0
11.07.2001, 17:02:00
    #32009382
Fompro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение переменной по её имени ?
Популярно:
До 2000 был ODS, теперь это только Extended Proc's. При выполнении запроса к серверу обрабатываются либо событие Language, либо RPC. Раньше Вы могли "навесить" свой обработчик события, к-ый, например, мог вести журнал. Как он был бы оформлен: в виде XP или ЕХЕ - почти всё равно. Разбор события RPC гораздо проще, тем более, Вы видите, что работа с параметрами вынесена в отдельные функции.
...
Рейтинг: 0 / 0
12.07.2001, 06:22:49
    #32009400
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение переменной по её имени ?
Fompro, а Вы не подскажете, где в BOL почитать про свой обработчик события - как он пишется и куда его, собственно, цеплять ? Как это делается в dblibrary, я представляю. Но как такой обработчик повесить на сервер, чтобы он как профайлер ловил события ?
...
Рейтинг: 0 / 0
12.07.2001, 07:16:15
    #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
12.07.2001, 07:17:25
    #32009410
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение переменной по её имени ?
Ради бога извините, влепил постинг не в ту ветку...
...
Рейтинг: 0 / 0
12.07.2001, 07:21:25
    #32009411
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение переменной по её имени ?
Да нет же, оказывается, в ту... Мой постинг - ответ на вопрос GreenSunrise. Просто обсуждение уже зашло далеко от темы изначально заданного вопроса...
...
Рейтинг: 0 / 0
12.07.2001, 18:33:48
    #32009480
Fompro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение переменной по её имени ?
1. Повторюсь - OPENDS60.DLL, включённая в 2000-к эти возможности не поддкрживает.
2. BOL особенно-то не расписывает КАК надо делать, там указано ЧЕМ пользоваться. Лучше всего посмотреть примеры ODS: Procsrv & Gateway. BOL опять-таки 6.5 или 7.0 Посмотрите "Event Management"
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
30.10.2002, 23:38:37
    #32063370
Nastasia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение переменной по её имени ?
To Glory :


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

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

srv_paramdata


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

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

Можно поступить так.
Сделать процедуру, которая пробегает по syscomments и достаёт оттуда текст процедур.
Далее она парсит процедуру на предмет комментариев с фиксированным текстом, например
--begin audit
--end audit
Всё, что необходимо для аудита формируется на основании sysobjects и syscolumns и пихается между этими комментариями.
Далее полученный текст запускается на исполнение через EXECUTE().
Лучше всего поставить эту процедуру в job и запускать где-то в районе 6:00, когда все программисты и пользователи уже спят. :)
...
Рейтинг: 0 / 0
31.10.2002, 23:09:25
    #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
01.11.2002, 10:29:02
    #32063875
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение переменной по её имени ?
Glory, Вам конечно видней. :)
...
Рейтинг: 0 / 0
01.11.2002, 10:43:56
    #32063884
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Значение переменной по её имени ?
повесь тригер на sysobjects....
отслеживай создание процедур....
пересоздавай процки с имя_процедуры;2
создай свою с таким же именем и параметрами
и в тексте вызывай имя;2.....
...
Рейтинг: 0 / 0
06.11.2002, 19:46:03
    #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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Значение переменной по её имени ? / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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