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

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

Это запускаю не я, а техники при актуализации приложения. Люди они нежные, при любом сообщении об ошибке впадающие а депрессию, из которой их вывести практически невозможно.
Беречь техников, конечно, правильно, но вообще у вас странная концепция обновлений.
Вы же должны привести базу в требуемое вам состояние. То есть если триггер должен быть, вы его создаёте/меняете, если не должен, то его и в коде обновления не будет.
Код (проект) должен быть эталогом, должны быть пакеты обновлений, приводящие БД в требуемую версию, далее вы (или техники) накатываете пакеты на нужные системы (дев, тест, продакшен1, ... продакшенN), приводя системы в нужное состояние.

А у вас сейчас, видимо, базы (причём несколько разных), в которых ручками что то правили (а где то не правили), и вам это не надо трогать.
Подход рискованный, вы не будете знать, в каком состоянии база, какой в ней код, вы её не контролируете. Процесс сопровождения становится нервным, с бесконечными разборками "кто виноват".
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39740137
Фотография burgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

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

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

наверное потму что
CREATE TRIGGER must be the first statement in the batch and can apply to only one table.причем это касается всех CREATE (ХП,/Ф-ций/Таблиц).

Аццки неудобно писать скрипты, которые должны накатываться на непустую БД.
При этом Drop+Create не выход, т.к. Create может быть неуспешен, ну и настроенные гранты слетят нафиг.
Приходится извращаться с exec('create ...'). :(

MS - дебилы на всю голову.
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39740383
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoTaPaKburgos,

наверное потму что
пропущено...
причем это касается всех CREATE (ХП,/Ф-ций/Таблиц).

Аццки неудобно писать скрипты, которые должны накатываться на непустую БД.
При этом Drop+Create не выход, т.к. Create может быть неуспешен, ну и настроенные гранты слетят нафиг.
Приходится извращаться с exec('create ...'). :(

MS - дебилы на всю голову."Дебилы на всю голову" уже давно выпустили SSDT для ленивых. А неленивым уже ничего не поможет, даже если create разрешать писать не в начале батча.
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39740417
Фотография burgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосовburgos,

тому, что Вы описали - прямая дорога в систему версионирования.
Каждому заказчику поставляется та версия и те изменения в этой версии продукта с которой он желает работать.
Для этого есть GIT, SVN и тому подобное.

Основываясь на моём скомном опыте поддержка нескольких версий програмы нежизнеспособна. Гораздо проще установить всем одну и ту же версию програмы и задать ей конкретный режим функционирования с помощью файла, в которам задана конфигурация.
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39740426
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей Алексеевич"Дебилы на всю голову" уже давно выпустили SSDT для ленивых. А неленивым уже ничего не поможет, даже если create разрешать писать не в начале батча.И толку с того ССДТ ???
Я сам программно создаю такие, как надо скрипты, а потом их накатываю. ССДТ все равно таких никогда не создаст.
К тому же в реальных условиях может не быть под рукой ССДТ, н-р у заказчика.

На create or alter сподобились аж в 2016. Не прошло и 20 лет.
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39740437
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
burgosalexeyvg,

У нас несколько другая ситуация. Иммется некий набор программ связанных мёду собой, и состоящих из отдельных блоков, которые подключаются в зависимости от того какую конфигурацию купит клиент. Существует также некий набор баз данных, которые тоже устанавливаются в зависимости от конфигурации. Плюс зти программы в некоторых случаях связаны с базами данных других программ, из которых они качают или в которые они передают данные. В общем черт голову сломить. Технику надо прийти к клиенту, запустить блок актуализации структур баз данных, установить новую версию программы и всё это не особенно зная, что именно там установлено. Каша конечно полная, но работает.Никакого противоречия с тем, что я написал.
Я же писал "(дев, тест, продакшен1, ... продакшенN)" - вот разные продакшен - это и есть разные клиенты, разные рабочие базы, которые должны немного отличаться друг от друга.

И разумнее делать скрипты для конкретных баз, или делать один скрипт, но в котором это учитывается

То есть вместо
Код: sql
1.
2.
3.
IF OBJECT_ID ('Имя_Триггера', 'TR') IS NOT NULL
    EXEC('
ALTER TRIGGER Имя_Триггера ON Таблица


Писать
Код: sql
1.
2.
3.
IF @SERVERNAME = 'имя сервера клиента'
    EXEC('
CREATE OR ALTER TRIGGER Имя_Триггера ON Таблица



Хотя инсталлятор для конкретного клиента ИМХО лучше.
L_argoАццки неудобно писать скрипты, которые должны накатываться на непустую БД.ИМХО вопрос привычки к языку.
"Аццки неудобно" - это когда нужно затратить для чего-либо в разы больше труда, чем можно было бы.
А тут вопрос всего лишь в навыке, окружении и инструментах. Эти окружение и инструменты формируются в команде, и, в общем, всё стьановится легко и ненапряжно.

Кстати, "на пустую базу" скрипт написать не легче, если писать хорошо. Ведь должна быть возможность выполнить скрипт несколько раз, и результат должен быть коректным. Тогда какая разница, на пустую или нет?

L_argoПри этом Drop+Create не выход, т.к. Create может быть неуспешен, ну и настроенные гранты слетят нафиг.Это я не понял.
Права надо прописывать в скрипте.
А если "Create неуспешен", то, значит, апдэйт не удался, нужно читать ошибку и исправлять (или воосстановить из бакапа, и отослать разработчикам письмо с логом).
Гавриленко Сергей Алексеевич"Дебилы на всю голову" уже давно выпустили SSDT для ленивых. А неленивым уже ничего не поможет, даже если create разрешать писать не в начале батча.ИМХО для задачи ТС не будет разницы между SSDT и нотепадом, писать то скрипты всё равно вручную
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39740440
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoНа create or alter сподобились аж в 2016. Не прошло и 20 лет.С одной стороны да, эито минус МС
С другой стороны, это разве что то меняет?
По любому апдэйт кода делается тулзом разработки, либо в виде исходного шаблока для кода процедуры, либо сборщиком - не набираете же вы код процедуры/триггера в скрипте полностью второй раз?
А потом скрипт должен собираться сборщиком апдэйта.
L_argoИ толку с того ССДТ ???
Я сам программно создаю такие, как надо скрипты, а потом их накатываю. ССДТ все равно таких никогда не создаст.
К тому же в реальных условиях может не быть под рукой ССДТ, н-р у заказчика.Да, для работы со сложными проектами БД МС так ничего и не создал с 80-х
Всё тот же make, ну, или свои самодельные программы.
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39740451
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Права надо прописывать в скрипте.Это не всегда возможно. А что если каждый логин имеет индивидуальную схему Grant-прав (пусть не на все объекты, а на некоторые критичные) ? Я такое встречал.
Перенакат прав - штука небыстрая и нетривиальная, т.к. список дропнутых/пересозданных объектов неочевиден и не всем из них нужен перенакат.
У нас полный перенакат всех прав занимал ок. 1мин. с почти полной блокировкой работы. :(
Зачем проделывать это всё, если достаточно всего лишь ALTER ?
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39740461
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoЭто не всегда возможно. Ну в принципе да, хотя индивидуальные права по логинам всё таки сильное исключение
L_argoЗачем проделывать это всё, если достаточно всего лишь ALTER ?Ну это так, зачемание по правам, а вообще ничего не мешает делать только ALTER
У на стандартный шаблон процедуры (триггера) в студии
Код: sql
1.
2.
3.
4.
5.
6.
7.
IF OBJECT_ID ('Имя') IS NULL
    EXEC('CREATE ...') -- тут создаём пустой объект
GO
ALTER ...
........
........
GO


Соответственно всегда делается просто ALTER
L_argoПеренакат прав - штука небыстрая и нетривиальная, т.к. список дропнутых/пересозданных объектов неочевиден и не всем из них нужен перенакат.
У нас полный перенакат всех прав занимал ок. 1мин. с почти полной блокировкой работы. :(Это уже зависит от концепции прав
Если есть некие роли, предназначенные разным группам процедур, то раздача прав делается в скрипте создания самого объекта. И тогда не надо перезаливать все права.
Зачем "все", если мы меняем в апдэйте немногие объекты? Вот для них, которые меняли, и надо назначать права, а не перезаливать всё.
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39740494
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У наc стандартный шаблон процедуры (триггера) в студииУ меня точно также.
Но хак с EXEC('create ...') конеш это ненормально в 21 веке (кинул камень в сторону MS).

А перезаливка прав - штука специфичная и динамичная для каждого проекта и не хотелось бы массово выносить ее в скрипты.
...
Рейтинг: 0 / 0
ALTER TRIGGER
    #39740495
Фотография burgos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoУ наc стандартный шаблон процедуры (триггера) в студииУ меня точно также.
Но хак с EXEC('create ...') конеш это ненормально в 21 веке (кинул камень в сторону MS).

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

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

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


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