powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ALTER TRIGGER
25 сообщений из 40, страница 1 из 2
ALTER TRIGGER
    #39739593
Фотография burgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно изменить триггер только в том случае когда он уже существует.

IF OBJECT_ID ('Имя_Триггера', 'TR') IS NOT NULL
begin
ALTER TRIGGER Имя_Триггера ON Таблица
AFTER UPDATE
AS
begin
........
........
end
end
GO

При запусе SQL выдаёт кучу сообщений об ошибках. Без IF всё прекрасно работает.

ЧЕГО ТУТ НЕ ТАК????
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739599
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
burgos,

наверное потму что
авторCREATE TRIGGER must be the first statement in the batch and can apply to only one table.
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739611
Фотография burgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaK,

Похоже, что так... Спасибо. Придётся изощеряться.
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739650
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
burgos,

в 2016 SP1 сервере появилось CREATE OR ALTER.

Копите деньги на апгрейд...
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739664
Фотография burgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

Я передам это шефу. :)
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739672
Фотография burgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосовburgos,

в 2016 SP1 сервере появилось CREATE OR ALTER.

Копите деньги на апгрейд...

Мне не нужно CREATE OR ALTER. Мне нужно только ALTER. Этот триггер не должен быть создан там где его нет, он должен быть изменен в том случае, если он уже существует.

P.S. 2106 это уже пройденый этап. У нас 2017. :)
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739673
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
burgos,

запишите так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
BEGIN TRAN
GO

IF ... IS NOT NULL
 DROP OBJ
GO

CREATE OBJ
GO

COMMIT
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739674
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
burgos,

Код: sql
1.
2.
3.
4.
5.
IF ... IS NULL
  RETURN
GO
ALTER ...
GO
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739677
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или переход по метке, если общий скрипт.
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739678
Фотография burgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

CREATE не нужен. Только ALTER.
21747171
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739681
Фотография burgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовИли переход по метке, если общий скрипт.

Это попробую!!!
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739682
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосовburgos,

Код: sql
1.
2.
3.
4.
5.
IF ... IS NULL
  RETURN
GO
ALTER ...
GO


занятно и будет работать? :)
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739684
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKВладислав Колосовburgos,

Код: sql
1.
2.
3.
4.
5.
IF ... IS NULL
  RETURN
GO
ALTER ...
GO


занятно и будет работать? :)

ретурн загадочен, чтобы не сомневались в существовании бесконечности
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739685
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
burgos,

за пределами пакета не сработает, сразу не подумал :)
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739694
Фотография burgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKВладислав Колосовburgos,

Код: sql
1.
2.
3.
4.
5.
IF ... IS NULL
  RETURN
GO
ALTER ...
GO


занятно и будет работать? :)

Это SQL изменений и дальше есть код.
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739695
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

переход по метке это тоже мимо.

Вариант или в транзакции DROP-CREATE Откат если не надо было или в динамику оборачивать ALTER
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739702
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решение в лоб - написать в динамике ALTER TRIGGER, а EXECUTE(N'<Текст ALTER TRIGGER>') выполнять
после проверки существования с созданием триггера, если его нет.
Код: sql
1.
2.
3.
IF OBJECT_ID(N'Имя_Триггера', 'TR') IS NULL
EXECUTE(N'CREATE TRIGGER [Имя_Триггера] FOR UPDATE ON [Имя_Таблицы] AS;');
EXECUTE(N'ALTER TRIGGER [Имя_Триггера] FOR UPDATE ON [Имя_Таблицы] AS <Текст триггера>');

Недостаток очевиден: если текст триггера большой, содержит одиночные кавычки и другие динамические EXECи,
то текст внутри EXECUTE('') получается нечитаемым и трудно поддерживаемым.
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739704
Фотография burgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IF OBJECT_ID ('Имя_Триггера', 'TR') IS NOT NULL
exec('ALTER TRIGGER Имя_Триггера ON Таблица
AFTER UPDATE AS
......
......')
GO

Работает. :)
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739712
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
burgosIF OBJECT_ID ('Имя_Триггера', 'TR') IS NOT NULL
exec('ALTER TRIGGER Имя_Триггера ON Таблица
AFTER UPDATE AS
......
......')
GO

Работает. :)Если можно с GO, то и динамика не нужна

Кстати, я там выше перепутал порядок ON TableName и FOR UPDATE
Извините
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739714
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapburgosIF OBJECT_ID ('Имя_Триггера', 'TR') IS NOT NULL
exec('ALTER TRIGGER Имя_Триггера ON Таблица
AFTER UPDATE AS
......
......')
GO

Работает. :)Если можно с GO, то и динамика не нужна

Кстати, я там выше перепутал порядок ON TableName и FOR UPDATE

ИзвинитеКстати, тогда помогут и SET NOEXEC {ON|OFF}
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739726
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
burgosПридётся изощеряться.

2 варанта
1.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
IF OBJECT_ID ('Имя_Триггера', 'TR') IS NULL
    SET NOEXEC ON 
GO
ALTER TRIGGER Имя_Триггера ON Таблица
AFTER UPDATE
AS 
begin
........
........
end
GO
SET NOEXEC OFF
GO


2.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
IF OBJECT_ID ('Имя_Триггера', 'TR') IS NOT NULL
    EXEC('
ALTER TRIGGER Имя_Триггера ON Таблица
AFTER UPDATE
AS 
begin
........
........
end

')
GO



В вариента 2 не забывайте удваивать кавычки в теле триггера
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739730
Фотография burgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

2-й! Уже сделал. :)
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739784
Фотография burgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем!
:)
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39739977
WarAnt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
burgos,

а просто запустить алтер и проигнорировать ошибку если его небыло?
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39740013
Фотография burgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WarAntburgos,

а просто запустить алтер и проигнорировать ошибку если его небыло?

Это запускаю не я, а техники при актуализации приложения. Люди они нежные, при любом сообщении об ошибке впадающие а депрессию, из которой их вывести практически невозможно.
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / ALTER TRIGGER
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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