Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как снести свою процедуру триггером? / 6 сообщений из 6, страница 1 из 1
03.12.2001, 00:45
    #32018279
Almi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как снести свою процедуру триггером?
Имя прцедуры надо формировать в триггере:

Declare @name_proc varchar(255)
set @name_proc = 'adm.name_proc'

но при этом

drop procedure @name_proc ругается

Подскажите как запустить такое макро...
...
Рейтинг: 0 / 0
03.12.2001, 01:04
    #32018280
Слон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как снести свою процедуру триггером?
По определению триггер не имеет права модифицировать схему. Так что единственное решение - например запись имени в специальную таблицу, которую будет читать job agent и создавать процедуру
...
Рейтинг: 0 / 0
03.12.2001, 03:20
    #32018282
Almi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как снести свою процедуру триггером?
Проблема в том что конструкция drop procedure @name_proc
не работает (даже не в триггере)
при этом
exec @name_proc - запускается без вопросов
...
Рейтинг: 0 / 0
03.12.2001, 04:25
    #32018283
Valera
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как снести свою процедуру триггером?
Используй не в тригерах:
declare @str varchar(8000)
set @str = 'drop procedure '+@proc_name
exec(@str)
...
Рейтинг: 0 / 0
03.12.2001, 05:12
    #32018285
Слон
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как снести свою процедуру триггером?
Повторюсь еще раз. Триггер не имеет права изменять схему никаким образом. То есть DROP, CREATE и ALTER statements не будут работать из триггера ни при каком раскладе. Одним из решений - записывать строку 'DROP PROC <owner_name>.<proc_name>' в какйюнибудь таблицу, а параллельно агент будет каждую секунду проверять наличие записей в этой таблице и исполнять их
...
Рейтинг: 0 / 0
03.12.2001, 06:20
    #32018286
Как снести свою процедуру триггером?
Триггер мне удавалась обмануть и заставить его запускать DROP и CREATE (касалось это таблиц, другое не проверял), правда это было в далеком SQL6.5, будет ли работать нижеописанное в 7.0/2000 - не знаю.
Общее направление действий такое:
1. Создается пустая процедура.
2. В триггере делается вызов этой процедуры - exec
3. Процедура модифицируется и в ней помещается этот код: create и drop.
И триггер через процедуру начинает и создавать и дропать.
Но! Любое изменение этого триггера приводит к тому, что он начинает ругаться на конструкции drop и create. Правда это опять лечится двойным пересозданием процедуры с убиранием нелигимных операторов и добавлением их вновь.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как снести свою процедуру триггером? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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