|
|
|
Создание триггера с проверкой существования таблицы
|
|||
|---|---|---|---|
|
#18+
Есть такая проблема. MS SQL 2000. Есть скрипт который создает триггер на таблицу. Необходимо перед созданием триггера проверить существует ли эта таблица. Возможно ли это сделать? Если нет, то есть ли способ "подавить" возникающую ошибку, т.к. в случае ошибки программа-инсталятор, используящая данный скрипт, делает полный откат установки назад ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2002, 11:34:45 |
|
||
|
Создание триггера с проверкой существования таблицы
|
|||
|---|---|---|---|
|
#18+
для проверки наличия таблицы используй Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2002, 11:43:50 |
|
||
|
Создание триггера с проверкой существования таблицы
|
|||
|---|---|---|---|
|
#18+
Данную проверку использовать в лоб нельзя. Т.е. if ....... begin create trigger... end Будет ошибка. Т.к. CREATE TRIGGER должен быть первой строкой в выполняемом пакете. Поэтому мне и необходим иной путь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2002, 11:47:17 |
|
||
|
Создание триггера с проверкой существования таблицы
|
|||
|---|---|---|---|
|
#18+
А как насчет if ....... begin execute("create trigger... GO") end ??? С уважением, Александр Степанов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2002, 12:05:59 |
|
||
|
Создание триггера с проверкой существования таблицы
|
|||
|---|---|---|---|
|
#18+
Так конечно можно, но триггер уж очень сложен и отладка его на фоне всего скрипта, где он будет в текстовом виде и без подсветки будет очень затруднительна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2002, 12:59:45 |
|
||
|
Создание триггера с проверкой существования таблицы
|
|||
|---|---|---|---|
|
#18+
хм.... а сначала отработать текст триггера с нормальной подсветкой, а уж по завершении отладки вставить проверку наличия таблицы???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2002, 13:26:59 |
|
||
|
Создание триггера с проверкой существования таблицы
|
|||
|---|---|---|---|
|
#18+
Не получится - проект постоянно развивается и необходимо думать о будущей поддержке. Со временем можно ведь и забыть что это за триггер. И чтобы понять что это такое придется его создать, потом смотреть и т.д. Т.е. теряется наглядность исходного кода. Таких триггеров много... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2002, 14:07:54 |
|
||
|
Создание триггера с проверкой существования таблицы
|
|||
|---|---|---|---|
|
#18+
Вопрос уже вышел за предметную область, но все-же: почему бы вам в инсталяторе (или при генерации инсталляции) не добавлять вышеописанную проверку к скрипту триггера который живет своей жизнью - развивается и подсвечивается совершенно самостоятельно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2002, 14:33:58 |
|
||
|
Создание триггера с проверкой существования таблицы
|
|||
|---|---|---|---|
|
#18+
а как вариант примерно такой.... хранимка usp_CheckTable... Код: plaintext 1. ну а в usp_CreateTrigger уже писать триггер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2002, 14:38:27 |
|
||
|
Создание триггера с проверкой существования таблицы
|
|||
|---|---|---|---|
|
#18+
Если нужно проверять наличие объектов в схеме данных, то в чем проблема? В начале скрипта if exists по разным типам объектов, или не хочется делать откат инсталяции? Так на фига такая инсталяция? Если проект будет развиваться (да даже если и не будет) необходимо в любом случае продумать его документирование и варианты переходя с версии на версию. Тут народ забодался слушать о CASE средствах, так что если интересно я могу по почте расказать один из вариантов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2002, 14:46:11 |
|
||
|
Создание триггера с проверкой существования таблицы
|
|||
|---|---|---|---|
|
#18+
В хранимой процедуре нельзя создавать триггер :) Проект как водится делался разными людьми и сейчас мы пришли к такой ситуации что должны поддерживать и развивать то что есть. Все дело в том что если в Бд нет некоторых объектов - то это нормально. Но если они есть то надо на них повесить триггерочки. И хорошо бы все это сделать на чистом SQL без разных промежуточных программулек-форматоров. И все это является частью большоооого скрипта. Правила придуманы не нами и поэтому рассуждения на тему НАДО БЫЛО ТАК имеют только философский но не практический смысл :) Я сейчас сделал временно (т.к. время поджимает и нет ничего живучей чем временно :) ) так, если нет таких таблиц то я создаю их со всеми полями + некое поле ХХХ. Потом создаются все триггера и все остальное. В конце я проверяю, что если есть такие таблицы с полями ХХХ то я их триггера убиваю и затем убиваю сами таблицы. Решение некрасивое. Но живучее... Хотелось бы иного, светлого и красивого... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2002, 14:52:12 |
|
||
|
Создание триггера с проверкой существования таблицы
|
|||
|---|---|---|---|
|
#18+
Опять ничего не понимаю, почему нельзя Код: plaintext 1. 2. 3. 4. ?????????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2002, 14:56:00 |
|
||
|
Создание триггера с проверкой существования таблицы
|
|||
|---|---|---|---|
|
#18+
Можно ничего не проверять, а сказать просто drop trigger. Если его нет, выскочит ошибка - ну и фиг с ней, проигнорируй. А следующей командой уже Create trigger - и никаких проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2002, 15:07:30 |
|
||
|
Создание триггера с проверкой существования таблицы
|
|||
|---|---|---|---|
|
#18+
To Genady: Нельзя. Потому что CREATE TRIGGER должен идти первой строкой в исполняемом пакете. В if... create ... Первой строкой идет if. Это не я придумал - это T-SQL. Есть некий инсталлятор в котором я ничего править не могу. Я даю ему просто файл с sql. Поэтому вариант что-то поправить в инсталляторе не проходит. Но при всем при этом инсталятор анализирует были ли ошибки при выполнении скрипта. Если были - то все откатывает. Вот такие вот дела... To Garya: Я не могу создать триггер на несуществующую таблицу. Вот мне бы и надо проверить ее существование и в случае наличия - создать триггер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2002, 15:21:02 |
|
||
|
Создание триггера с проверкой существования таблицы
|
|||
|---|---|---|---|
|
#18+
2 Андрей Малянов Ну тогда другого варианта, чем тот, что Вы реализовали и нет. Если припомнить автоматически сгенеренные в QA или ЕМ скрипты то если указываешь проверку наличия объектов, то в скрипте тупо проставлены дропы, а затем create. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2002, 15:36:10 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32056309&tid=1819777]: |
0ms |
get settings: |
4ms |
get forum list: |
26ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
95ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 390ms |

| 0 / 0 |
