Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
Нужно изменить триггер только в том случае когда он уже существует. IF OBJECT_ID ('Имя_Триггера', 'TR') IS NOT NULL begin ALTER TRIGGER Имя_Триггера ON Таблица AFTER UPDATE AS begin ........ ........ end end GO При запусе SQL выдаёт кучу сообщений об ошибках. Без IF всё прекрасно работает. ЧЕГО ТУТ НЕ ТАК???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 11:27 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
burgos, наверное потму что авторCREATE TRIGGER must be the first statement in the batch and can apply to only one table. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 11:32 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
TaPaK, Похоже, что так... Спасибо. Придётся изощеряться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 11:39 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
burgos, в 2016 SP1 сервере появилось CREATE OR ALTER. Копите деньги на апгрейд... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 12:14 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов, Я передам это шефу. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 12:26 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
Владислав Колосовburgos, в 2016 SP1 сервере появилось CREATE OR ALTER. Копите деньги на апгрейд... Мне не нужно CREATE OR ALTER. Мне нужно только ALTER. Этот триггер не должен быть создан там где его нет, он должен быть изменен в том случае, если он уже существует. P.S. 2106 это уже пройденый этап. У нас 2017. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 12:34 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
burgos, запишите так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 12:34 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
burgos, Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 12:36 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
Или переход по метке, если общий скрипт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 12:37 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
Владислав КолосовИли переход по метке, если общий скрипт. Это попробую!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 12:39 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
Владислав Колосовburgos, Код: sql 1. 2. 3. 4. 5. занятно и будет работать? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 12:40 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
TaPaKВладислав Колосовburgos, Код: sql 1. 2. 3. 4. 5. занятно и будет работать? :) ретурн загадочен, чтобы не сомневались в существовании бесконечности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 12:41 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
burgos, за пределами пакета не сработает, сразу не подумал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 12:41 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
TaPaKВладислав Колосовburgos, Код: sql 1. 2. 3. 4. 5. занятно и будет работать? :) Это SQL изменений и дальше есть код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 12:48 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов, переход по метке это тоже мимо. Вариант или в транзакции DROP-CREATE Откат если не надо было или в динамику оборачивать ALTER ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 12:49 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
Решение в лоб - написать в динамике ALTER TRIGGER, а EXECUTE(N'<Текст ALTER TRIGGER>') выполнять после проверки существования с созданием триггера, если его нет. Код: sql 1. 2. 3. Недостаток очевиден: если текст триггера большой, содержит одиночные кавычки и другие динамические EXECи, то текст внутри EXECUTE('') получается нечитаемым и трудно поддерживаемым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 13:01 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
IF OBJECT_ID ('Имя_Триггера', 'TR') IS NOT NULL exec('ALTER TRIGGER Имя_Триггера ON Таблица AFTER UPDATE AS ...... ......') GO Работает. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 13:03 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
burgosIF OBJECT_ID ('Имя_Триггера', 'TR') IS NOT NULL exec('ALTER TRIGGER Имя_Триггера ON Таблица AFTER UPDATE AS ...... ......') GO Работает. :)Если можно с GO, то и динамика не нужна Кстати, я там выше перепутал порядок ON TableName и FOR UPDATE Извините ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 13:14 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
iapburgosIF OBJECT_ID ('Имя_Триггера', 'TR') IS NOT NULL exec('ALTER TRIGGER Имя_Триггера ON Таблица AFTER UPDATE AS ...... ......') GO Работает. :)Если можно с GO, то и динамика не нужна Кстати, я там выше перепутал порядок ON TableName и FOR UPDATE ИзвинитеКстати, тогда помогут и SET NOEXEC {ON|OFF} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 13:16 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
burgosПридётся изощеряться. 2 варанта 1. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 2. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. В вариента 2 не забывайте удваивать кавычки в теле триггера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 13:24 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
alexeyvg, 2-й! Уже сделал. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 13:26 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
burgos, а просто запустить алтер и проигнорировать ошибку если его небыло? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 17:27 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
WarAntburgos, а просто запустить алтер и проигнорировать ошибку если его небыло? Это запускаю не я, а техники при актуализации приложения. Люди они нежные, при любом сообщении об ошибке впадающие а депрессию, из которой их вывести практически невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 18:10 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
burgosWarAntburgos, а просто запустить алтер и проигнорировать ошибку если его небыло? Это запускаю не я, а техники при актуализации приложения. Люди они нежные, при любом сообщении об ошибке впадающие а депрессию, из которой их вывести практически невозможно. Беречь техников, конечно, правильно, но вообще у вас странная концепция обновлений. Вы же должны привести базу в требуемое вам состояние. То есть если триггер должен быть, вы его создаёте/меняете, если не должен, то его и в коде обновления не будет. Код (проект) должен быть эталогом, должны быть пакеты обновлений, приводящие БД в требуемую версию, далее вы (или техники) накатываете пакеты на нужные системы (дев, тест, продакшен1, ... продакшенN), приводя системы в нужное состояние. А у вас сейчас, видимо, базы (причём несколько разных), в которых ручками что то правили (а где то не правили), и вам это не надо трогать. Подход рискованный, вы не будете знать, в каком состоянии база, какой в ней код, вы её не контролируете. Процесс сопровождения становится нервным, с бесконечными разборками "кто виноват". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 18:38 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
alexeyvg, У нас несколько другая ситуация. Иммется некий набор программ связанных мёду собой, и состоящих из отдельных блоков, которые подключаются в зависимости от того какую конфигурацию купит клиент. Существует также некий набор баз данных, которые тоже устанавливаются в зависимости от конфигурации. Плюс зти программы в некоторых случаях связаны с базами данных других программ, из которых они качают или в которые они передают данные. В общем черт голову сломить. Технику надо прийти к клиенту, запустить блок актуализации структур баз данных, установить новую версию программы и всё это не особенно зная, что именно там установлено. Каша конечно полная, но работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2018, 22:55 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
burgos, тому, что Вы описали - прямая дорога в систему версионирования. Каждому заказчику поставляется та версия и те изменения в этой версии продукта с которой он желает работать. Для этого есть GIT, SVN и тому подобное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 13:18 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
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 - дебилы на всю голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 14:38 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
L_argoTaPaKburgos, наверное потму что пропущено... причем это касается всех CREATE (ХП,/Ф-ций/Таблиц). Аццки неудобно писать скрипты, которые должны накатываться на непустую БД. При этом Drop+Create не выход, т.к. Create может быть неуспешен, ну и настроенные гранты слетят нафиг. Приходится извращаться с exec('create ...'). :( MS - дебилы на всю голову."Дебилы на всю голову" уже давно выпустили SSDT для ленивых. А неленивым уже ничего не поможет, даже если create разрешать писать не в начале батча. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 14:42 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
Владислав Колосовburgos, тому, что Вы описали - прямая дорога в систему версионирования. Каждому заказчику поставляется та версия и те изменения в этой версии продукта с которой он желает работать. Для этого есть GIT, SVN и тому подобное. Основываясь на моём скомном опыте поддержка нескольких версий програмы нежизнеспособна. Гораздо проще установить всем одну и ту же версию програмы и задать ей конкретный режим функционирования с помощью файла, в которам задана конфигурация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 15:34 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
Гавриленко Сергей Алексеевич"Дебилы на всю голову" уже давно выпустили SSDT для ленивых. А неленивым уже ничего не поможет, даже если create разрешать писать не в начале батча.И толку с того ССДТ ??? Я сам программно создаю такие, как надо скрипты, а потом их накатываю. ССДТ все равно таких никогда не создаст. К тому же в реальных условиях может не быть под рукой ССДТ, н-р у заказчика. На create or alter сподобились аж в 2016. Не прошло и 20 лет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 15:47 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
burgosalexeyvg, У нас несколько другая ситуация. Иммется некий набор программ связанных мёду собой, и состоящих из отдельных блоков, которые подключаются в зависимости от того какую конфигурацию купит клиент. Существует также некий набор баз данных, которые тоже устанавливаются в зависимости от конфигурации. Плюс зти программы в некоторых случаях связаны с базами данных других программ, из которых они качают или в которые они передают данные. В общем черт голову сломить. Технику надо прийти к клиенту, запустить блок актуализации структур баз данных, установить новую версию программы и всё это не особенно зная, что именно там установлено. Каша конечно полная, но работает.Никакого противоречия с тем, что я написал. Я же писал "(дев, тест, продакшен1, ... продакшенN)" - вот разные продакшен - это и есть разные клиенты, разные рабочие базы, которые должны немного отличаться друг от друга. И разумнее делать скрипты для конкретных баз, или делать один скрипт, но в котором это учитывается То есть вместо Код: sql 1. 2. 3. Писать Код: sql 1. 2. 3. Хотя инсталлятор для конкретного клиента ИМХО лучше. L_argoАццки неудобно писать скрипты, которые должны накатываться на непустую БД.ИМХО вопрос привычки к языку. "Аццки неудобно" - это когда нужно затратить для чего-либо в разы больше труда, чем можно было бы. А тут вопрос всего лишь в навыке, окружении и инструментах. Эти окружение и инструменты формируются в команде, и, в общем, всё стьановится легко и ненапряжно. Кстати, "на пустую базу" скрипт написать не легче, если писать хорошо. Ведь должна быть возможность выполнить скрипт несколько раз, и результат должен быть коректным. Тогда какая разница, на пустую или нет? L_argoПри этом Drop+Create не выход, т.к. Create может быть неуспешен, ну и настроенные гранты слетят нафиг.Это я не понял. Права надо прописывать в скрипте. А если "Create неуспешен", то, значит, апдэйт не удался, нужно читать ошибку и исправлять (или воосстановить из бакапа, и отослать разработчикам письмо с логом). Гавриленко Сергей Алексеевич"Дебилы на всю голову" уже давно выпустили SSDT для ленивых. А неленивым уже ничего не поможет, даже если create разрешать писать не в начале батча.ИМХО для задачи ТС не будет разницы между SSDT и нотепадом, писать то скрипты всё равно вручную ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 15:55 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
L_argoНа create or alter сподобились аж в 2016. Не прошло и 20 лет.С одной стороны да, эито минус МС С другой стороны, это разве что то меняет? По любому апдэйт кода делается тулзом разработки, либо в виде исходного шаблока для кода процедуры, либо сборщиком - не набираете же вы код процедуры/триггера в скрипте полностью второй раз? А потом скрипт должен собираться сборщиком апдэйта. L_argoИ толку с того ССДТ ??? Я сам программно создаю такие, как надо скрипты, а потом их накатываю. ССДТ все равно таких никогда не создаст. К тому же в реальных условиях может не быть под рукой ССДТ, н-р у заказчика.Да, для работы со сложными проектами БД МС так ничего и не создал с 80-х Всё тот же make, ну, или свои самодельные программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 16:00 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
Права надо прописывать в скрипте.Это не всегда возможно. А что если каждый логин имеет индивидуальную схему Grant-прав (пусть не на все объекты, а на некоторые критичные) ? Я такое встречал. Перенакат прав - штука небыстрая и нетривиальная, т.к. список дропнутых/пересозданных объектов неочевиден и не всем из них нужен перенакат. У нас полный перенакат всех прав занимал ок. 1мин. с почти полной блокировкой работы. :( Зачем проделывать это всё, если достаточно всего лишь ALTER ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 16:21 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
L_argoЭто не всегда возможно. Ну в принципе да, хотя индивидуальные права по логинам всё таки сильное исключение L_argoЗачем проделывать это всё, если достаточно всего лишь ALTER ?Ну это так, зачемание по правам, а вообще ничего не мешает делать только ALTER У на стандартный шаблон процедуры (триггера) в студии Код: sql 1. 2. 3. 4. 5. 6. 7. Соответственно всегда делается просто ALTER L_argoПеренакат прав - штука небыстрая и нетривиальная, т.к. список дропнутых/пересозданных объектов неочевиден и не всем из них нужен перенакат. У нас полный перенакат всех прав занимал ок. 1мин. с почти полной блокировкой работы. :(Это уже зависит от концепции прав Если есть некие роли, предназначенные разным группам процедур, то раздача прав делается в скрипте создания самого объекта. И тогда не надо перезаливать все права. Зачем "все", если мы меняем в апдэйте немногие объекты? Вот для них, которые меняли, и надо назначать права, а не перезаливать всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 16:46 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
У наc стандартный шаблон процедуры (триггера) в студииУ меня точно также. Но хак с EXEC('create ...') конеш это ненормально в 21 веке (кинул камень в сторону MS). А перезаливка прав - штука специфичная и динамичная для каждого проекта и не хотелось бы массово выносить ее в скрипты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 17:56 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
L_argoУ наc стандартный шаблон процедуры (триггера) в студииУ меня точно также. Но хак с EXEC('create ...') конеш это ненормально в 21 веке (кинул камень в сторону MS). А перезаливка прав - штука специфичная и динамичная для каждого проекта и не хотелось бы массово выносить ее в скрипты. Всё, что работает, нормально. Впрочем, предложите альтернативы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2018, 18:01 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
burgos, Альтернатива - это SSDT и умение работать с ветками GIT. Плюс немного персонала, занимающегося по совместительству формированием поставок. Персонал можно ротировать, чтобы все в курсе были. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 11:11 |
|
||
|
ALTER TRIGGER
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов, У нас фирма 26 человек, включая 2 техника, одного comercial, который надоедает потенциальным клиентам и выслушивает претензии не потенциальных, начальника, бухгалтера и 2-х на тестконтроле. Остальные, как принято выражаться, говнокодеры/руководители проектов, часто в одном лице. Можно конечно устроить им ротацию, но не знаю насколько это нужно. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2018, 12:54 |
|
||
|
|

start [/forum/topic.php?all=1&fid=46&tid=1688685]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 249ms |
| total: | 387ms |

| 0 / 0 |
