Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Создание триггера с проверкой существования таблицы / 15 сообщений из 15, страница 1 из 1
08.10.2002, 11:34:45
    #32056250
Создание триггера с проверкой существования таблицы
Есть такая проблема. MS SQL 2000. Есть скрипт который создает триггер на таблицу. Необходимо перед созданием триггера проверить существует ли эта таблица. Возможно ли это сделать? Если нет, то есть ли способ "подавить" возникающую ошибку, т.к. в случае ошибки программа-инсталятор, используящая данный скрипт, делает полный откат установки назад
...
Рейтинг: 0 / 0
08.10.2002, 11:43:50
    #32056257
Spirit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера с проверкой существования таблицы
для проверки наличия таблицы используй
Код: plaintext
if exists (select name from sysobjects where name='имя таблицы') 
...
Рейтинг: 0 / 0
08.10.2002, 11:47:17
    #32056262
Создание триггера с проверкой существования таблицы
Данную проверку использовать в лоб нельзя.
Т.е.
if .......
begin
create trigger...
end

Будет ошибка. Т.к. CREATE TRIGGER должен быть первой строкой в выполняемом пакете.
Поэтому мне и необходим иной путь.
...
Рейтинг: 0 / 0
08.10.2002, 12:05:59
    #32056276
Александр Степанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера с проверкой существования таблицы
А как насчет

if .......
begin
execute("create trigger... GO")
end

???

С уважением,
Александр Степанов
...
Рейтинг: 0 / 0
08.10.2002, 12:59:45
    #32056296
Создание триггера с проверкой существования таблицы
Так конечно можно, но триггер уж очень сложен и отладка его на фоне всего скрипта, где он будет в текстовом виде и без подсветки будет очень затруднительна.
...
Рейтинг: 0 / 0
08.10.2002, 13:26:59
    #32056309
Spirit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера с проверкой существования таблицы
хм.... а сначала отработать текст триггера с нормальной подсветкой, а уж по завершении отладки вставить проверку наличия таблицы????
...
Рейтинг: 0 / 0
08.10.2002, 14:07:54
    #32056330
Создание триггера с проверкой существования таблицы
Не получится - проект постоянно развивается и необходимо думать о будущей поддержке. Со временем можно ведь и забыть что это за триггер. И чтобы понять что это такое придется его создать, потом смотреть и т.д. Т.е. теряется наглядность исходного кода. Таких триггеров много...
...
Рейтинг: 0 / 0
08.10.2002, 14:33:58
    #32056343
Nickolay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера с проверкой существования таблицы
Вопрос уже вышел за предметную область, но все-же:
почему бы вам в инсталяторе (или при генерации инсталляции) не добавлять вышеописанную проверку к скрипту триггера который живет своей жизнью - развивается и подсвечивается совершенно самостоятельно?
...
Рейтинг: 0 / 0
08.10.2002, 14:38:27
    #32056344
Spirit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера с проверкой существования таблицы
а как вариант примерно такой....
хранимка usp_CheckTable...
Код: plaintext
1.
if exists (select name from sysobjects where name='имя таблицы') exec usp_CreateTrigger

ну а в usp_CreateTrigger уже писать триггер
...
Рейтинг: 0 / 0
08.10.2002, 14:46:11
    #32056349
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера с проверкой существования таблицы
Если нужно проверять наличие объектов в схеме данных, то в чем проблема?
В начале скрипта if exists по разным типам объектов, или не хочется делать откат инсталяции?
Так на фига такая инсталяция?
Если проект будет развиваться (да даже если и не будет) необходимо в любом случае продумать его документирование и варианты переходя с версии на версию.
Тут народ забодался слушать о CASE средствах, так что если интересно я могу по почте расказать один из вариантов.
...
Рейтинг: 0 / 0
08.10.2002, 14:52:12
    #32056354
Создание триггера с проверкой существования таблицы
В хранимой процедуре нельзя создавать триггер :)

Проект как водится делался разными людьми и сейчас мы пришли к такой ситуации что должны поддерживать и развивать то что есть. Все дело в том что если в Бд нет некоторых объектов - то это нормально. Но если они есть то надо на них повесить триггерочки. И хорошо бы все это сделать на чистом SQL без разных промежуточных программулек-форматоров. И все это является частью большоооого скрипта. Правила придуманы не нами и поэтому рассуждения на тему НАДО БЫЛО ТАК имеют только философский но не практический смысл :)
Я сейчас сделал временно (т.к. время поджимает и нет ничего живучей чем временно :) ) так, если нет таких таблиц то я создаю их со всеми полями + некое поле ХХХ. Потом создаются все триггера и все остальное. В конце я проверяю, что если есть такие таблицы с полями ХХХ то я их триггера убиваю и затем убиваю сами таблицы. Решение некрасивое. Но живучее... Хотелось бы иного, светлого и красивого...
...
Рейтинг: 0 / 0
08.10.2002, 14:56:00
    #32056355
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера с проверкой существования таблицы
Опять ничего не понимаю, почему нельзя
Код: plaintext
1.
2.
3.
4.
if exists (select name from sysobjects where name='имя таблицы') 
begin
Create trigger ....
end

??????????
...
Рейтинг: 0 / 0
08.10.2002, 15:07:30
    #32056364
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера с проверкой существования таблицы
Можно ничего не проверять, а сказать просто drop trigger. Если его нет, выскочит ошибка - ну и фиг с ней, проигнорируй. А следующей командой уже Create trigger - и никаких проблем.
...
Рейтинг: 0 / 0
08.10.2002, 15:21:02
    #32056369
Создание триггера с проверкой существования таблицы
To Genady:
Нельзя. Потому что CREATE TRIGGER должен идти первой строкой в исполняемом пакете.
В if...
create ...
Первой строкой идет if.
Это не я придумал - это T-SQL.
Есть некий инсталлятор в котором я ничего править не могу. Я даю ему просто файл с sql. Поэтому вариант что-то поправить в инсталляторе не проходит. Но при всем при этом инсталятор анализирует были ли ошибки при выполнении скрипта. Если были - то все откатывает. Вот такие вот дела...

To Garya:
Я не могу создать триггер на несуществующую таблицу. Вот мне бы и надо проверить ее существование и в случае наличия - создать триггер.
...
Рейтинг: 0 / 0
08.10.2002, 15:36:10
    #32056377
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание триггера с проверкой существования таблицы
2 Андрей Малянов

Ну тогда другого варианта, чем тот, что Вы реализовали и нет. Если припомнить автоматически сгенеренные в QA или ЕМ скрипты то если указываешь проверку наличия объектов, то в скрипте тупо проставлены дропы, а затем create.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Создание триггера с проверкой существования таблицы / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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