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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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


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

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

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

Вариант или в транзакции DROP-CREATE Откат если не надо было или в динамику оборачивать ALTER
...
Рейтинг: 0 / 0
28.11.2018, 13:01
    #39739702
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ALTER TRIGGER
Решение в лоб - написать в динамике 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
28.11.2018, 13:03
    #39739704
burgos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ALTER TRIGGER
IF OBJECT_ID ('Имя_Триггера', 'TR') IS NOT NULL
exec('ALTER TRIGGER Имя_Триггера ON Таблица
AFTER UPDATE AS
......
......')
GO

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

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

Кстати, я там выше перепутал порядок ON TableName и FOR UPDATE
Извините
...
Рейтинг: 0 / 0
28.11.2018, 13:16
    #39739714
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ALTER TRIGGER
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
28.11.2018, 13:24
    #39739726
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ALTER TRIGGER
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
28.11.2018, 13:26
    #39739730
burgos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ALTER TRIGGER
alexeyvg,

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

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

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

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


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