Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: ALTER TRIGGER  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27408
burgos
WarAnt
burgos,

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


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

А у вас сейчас, видимо, базы (причём несколько разных), в которых ручками что то правили (а где то не правили), и вам это не надо трогать.
Подход рискованный, вы не будете знать, в каком состоянии база, какой в ней код, вы её не контролируете. Процесс сопровождения становится нервным, с бесконечными разборками "кто виноват".
28 ноя 18, 18:38    [21747787]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TRIGGER  [new]
burgos
Member

Откуда: España
Сообщений: 9081
alexeyvg,

У нас несколько другая ситуация. Иммется некий набор программ связанных мёду собой, и состоящих из отдельных блоков, которые подключаются в зависимости от того какую конфигурацию купит клиент. Существует также некий набор баз данных, которые тоже устанавливаются в зависимости от конфигурации. Плюс зти программы в некоторых случаях связаны с базами данных других программ, из которых они качают или в которые они передают данные. В общем черт голову сломить. Технику надо прийти к клиенту, запустить блок актуализации структур баз данных, установить новую версию программы и всё это не особенно зная, что именно там установлено. Каша конечно полная, но работает.
28 ноя 18, 22:55    [21747933]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TRIGGER  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 5951
burgos,

тому, что Вы описали - прямая дорога в систему версионирования.
Каждому заказчику поставляется та версия и те изменения в этой версии продукта с которой он желает работать.
Для этого есть GIT, SVN и тому подобное.
29 ноя 18, 13:18    [21748475]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TRIGGER  [new]
L_argo
Member

Откуда:
Сообщений: 441
TaPaK
burgos,

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

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

MS - дебилы на всю голову.
29 ноя 18, 14:38    [21748634]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TRIGGER  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 35825
L_argo
TaPaK
burgos,

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

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

MS - дебилы на всю голову.
"Дебилы на всю голову" уже давно выпустили SSDT для ленивых. А неленивым уже ничего не поможет, даже если create разрешать писать не в начале батча.
29 ноя 18, 14:42    [21748639]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TRIGGER  [new]
burgos
Member

Откуда: España
Сообщений: 9081
Владислав Колосов
burgos,

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


Основываясь на моём скомном опыте поддержка нескольких версий програмы нежизнеспособна. Гораздо проще установить всем одну и ту же версию програмы и задать ей конкретный режим функционирования с помощью файла, в которам задана конфигурация.
29 ноя 18, 15:34    [21748748]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TRIGGER  [new]
L_argo
Member

Откуда:
Сообщений: 441
Гавриленко Сергей Алексеевич
"Дебилы на всю голову" уже давно выпустили SSDT для ленивых. А неленивым уже ничего не поможет, даже если create разрешать писать не в начале батча.
И толку с того ССДТ ???
Я сам программно создаю такие, как надо скрипты, а потом их накатываю. ССДТ все равно таких никогда не создаст.
К тому же в реальных условиях может не быть под рукой ССДТ, н-р у заказчика.

На create or alter сподобились аж в 2016. Не прошло и 20 лет.
29 ноя 18, 15:47    [21748774]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TRIGGER  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27408
burgos
alexeyvg,

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

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

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

Писать
IF @SERVERNAME = 'имя сервера клиента'
    EXEC('
CREATE OR ALTER TRIGGER Имя_Триггера ON Таблица


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

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

L_argo
При этом Drop+Create не выход, т.к. Create может быть неуспешен, ну и настроенные гранты слетят нафиг.
Это я не понял.
Права надо прописывать в скрипте.
А если "Create неуспешен", то, значит, апдэйт не удался, нужно читать ошибку и исправлять (или воосстановить из бакапа, и отослать разработчикам письмо с логом).
Гавриленко Сергей Алексеевич
"Дебилы на всю голову" уже давно выпустили SSDT для ленивых. А неленивым уже ничего не поможет, даже если create разрешать писать не в начале батча.
ИМХО для задачи ТС не будет разницы между SSDT и нотепадом, писать то скрипты всё равно вручную
29 ноя 18, 15:55    [21748789]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TRIGGER  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27408
L_argo
На create or alter сподобились аж в 2016. Не прошло и 20 лет.
С одной стороны да, эито минус МС
С другой стороны, это разве что то меняет?
По любому апдэйт кода делается тулзом разработки, либо в виде исходного шаблока для кода процедуры, либо сборщиком - не набираете же вы код процедуры/триггера в скрипте полностью второй раз?
А потом скрипт должен собираться сборщиком апдэйта.
L_argo
И толку с того ССДТ ???
Я сам программно создаю такие, как надо скрипты, а потом их накатываю. ССДТ все равно таких никогда не создаст.
К тому же в реальных условиях может не быть под рукой ССДТ, н-р у заказчика.
Да, для работы со сложными проектами БД МС так ничего и не создал с 80-х
Всё тот же make, ну, или свои самодельные программы.
29 ноя 18, 16:00    [21748796]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TRIGGER  [new]
L_argo
Member

Откуда:
Сообщений: 441
Права надо прописывать в скрипте.
Это не всегда возможно. А что если каждый логин имеет индивидуальную схему Grant-прав (пусть не на все объекты, а на некоторые критичные) ? Я такое встречал.
Перенакат прав - штука небыстрая и нетривиальная, т.к. список дропнутых/пересозданных объектов неочевиден и не всем из них нужен перенакат.
У нас полный перенакат всех прав занимал ок. 1мин. с почти полной блокировкой работы. :(
Зачем проделывать это всё, если достаточно всего лишь ALTER ?
29 ноя 18, 16:21    [21748838]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TRIGGER  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 27408
L_argo
Это не всегда возможно.
Ну в принципе да, хотя индивидуальные права по логинам всё таки сильное исключение
L_argo
Зачем проделывать это всё, если достаточно всего лишь ALTER ?
Ну это так, зачемание по правам, а вообще ничего не мешает делать только ALTER
У на стандартный шаблон процедуры (триггера) в студии
IF OBJECT_ID ('Имя') IS NULL
    EXEC('CREATE ...') -- тут создаём пустой объект
GO
ALTER ...
........
........
GO

Соответственно всегда делается просто ALTER
L_argo
Перенакат прав - штука небыстрая и нетривиальная, т.к. список дропнутых/пересозданных объектов неочевиден и не всем из них нужен перенакат.
У нас полный перенакат всех прав занимал ок. 1мин. с почти полной блокировкой работы. :(
Это уже зависит от концепции прав
Если есть некие роли, предназначенные разным группам процедур, то раздача прав делается в скрипте создания самого объекта. И тогда не надо перезаливать все права.
Зачем "все", если мы меняем в апдэйте немногие объекты? Вот для них, которые меняли, и надо назначать права, а не перезаливать всё.
29 ноя 18, 16:46    [21748874]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TRIGGER  [new]
L_argo
Member

Откуда:
Сообщений: 441
У наc стандартный шаблон процедуры (триггера) в студии
У меня точно также.
Но хак с EXEC('create ...') конеш это ненормально в 21 веке (кинул камень в сторону MS).

А перезаливка прав - штука специфичная и динамичная для каждого проекта и не хотелось бы массово выносить ее в скрипты.
29 ноя 18, 17:56    [21748937]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TRIGGER  [new]
burgos
Member

Откуда: España
Сообщений: 9081
L_argo
У наc стандартный шаблон процедуры (триггера) в студии
У меня точно также.
Но хак с EXEC('create ...') конеш это ненормально в 21 веке (кинул камень в сторону MS).

А перезаливка прав - штука специфичная и динамичная для каждого проекта и не хотелось бы массово выносить ее в скрипты.

Всё, что работает, нормально. Впрочем, предложите альтернативы.
29 ноя 18, 18:01    [21748945]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TRIGGER  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 5951
burgos,

Альтернатива - это SSDT и умение работать с ветками GIT. Плюс немного персонала, занимающегося по совместительству формированием поставок. Персонал можно ротировать, чтобы все в курсе были.
30 ноя 18, 11:11    [21749638]     Ответить | Цитировать Сообщить модератору
 Re: ALTER TRIGGER  [new]
burgos
Member

Откуда: España
Сообщений: 9081
Владислав Колосов,

У нас фирма 26 человек, включая 2 техника, одного comercial, который надоедает потенциальным клиентам и выслушивает претензии не потенциальных, начальника, бухгалтера и 2-х на тестконтроле. Остальные, как принято выражаться, говнокодеры/руководители проектов, часто в одном лице. Можно конечно устроить им ротацию, но не знаю насколько это нужно. :)
30 ноя 18, 12:54    [21749831]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Microsoft SQL Server Ответить