-
Уважаемые знатоки!!!
Пытаюсь вставить в тело процедуры строку
"ALTER TRIGGER TR_INS_CLIENT INACTIVE;"
для отключения на время триггера.
SET TERM ^ ;
CREATE PROCEDURE SP_INS_CLIENTS_ON_ORDER (
...
)
returns (
...
)
as
begin
ALTER TRIGGER TR_INS_CLIENT INACTIVE;
INSERT INTO Data_Clients
(
...
)
VALUES
(
...
);
suspend;
end^
SET TERM ; ^
Выдается ошибка
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 29, char 3.
ALTER.
Просто так строка работает.
Что может быть? Подскажите, пжт.
-
declare @sql varchar(1000)
set @sql='ALTER TRIGGER TR_INS_CLIENT INACTIVE;';
exec(@sql);
-
> Ega23 © (27.06.08 14:49) [1]
Причем тут MSSQL?
>samalex (27.06.08 14:42)
Изменение метаданных в процедурах недопустимо.
-
> Изменение метаданных в процедурах недопустимо.
И, более того, такое желание говорит о кривом проектировании.
-
> Причем тут MSSQL?
>
Упс. Мне показалось что MSSQL фигурировал. Ну да ладно, сама идея тогда...
-
идея дурная соврешенно
особенно в многопользовательском окружении
-
Как мне тогда реализовать INSERT , чтобы не работал триггер, прикрепленный к таблице не вставку?
Это мне нужно : из-за сбоев или ошибок ОС программа не выполняет операцию INSERT. А генератор увеличивается. Остаются "дырки" в списке.
-
> идея дурная соврешенно
> особенно в многопользовательском окружении
>
Идея отключать триггер дурна ещё более. Но если очень хочется...
а вообще я +1 к [3]
-
> А генератор увеличивается. Остаются "дырки" в списке.
Беспокойство про "дырки в списке" - это паранойя. Поверь мне...
:)
-
Кстати, сходи на www.ibase.ru, почитай про генераторы.
-
Для параноиков, не надо использовать генераторы.
-
Убедили, пойду другим путем, изменю триггер.
Будет работать в зависимости от заполнения поля "order_client".
Как Вам такая идея?
SET TERM ^ ;
CREATE TRIGGER TR_ID_CLIENT FOR DATA_CLIENTS
ACTIVE BEFORE INSERT POSITION 0
as
begin
if (NEW.order_client<>'') then
begin
NEW.id_order = GEN_ID(gen_id_order, 1);
end
end
^
SET TERM ; ^
-
жертва извращенного чувства прекрасного
-
не нравятся "дырки" - не используй генераторы и поимей уже настоящие проблемы, отличные от проблемы дырок.
-
> samalex (27.06.08 15:56) [11]
Ты не фантазируй на тему стандартных приемов. Все они в примерах приведены на www.ibase.ru
-
> Johnmen © (27.06.08 15:49) [8]
> Беспокойство про "дырки в списке" - это паранойя. Поверь
> мне...
не верю.
например, есть у тебя папка (физическая :) с документами за №№ от 1200 до 1700. И бумажки № 1234 нету. это о чем говорит, о том что ее потеряли или о том что ее никогда не было?
-
> не верю.
зря
> о том что ее потеряли или о том что ее никогда не было?
ни о том ни о другом,
это говорит (в базовых терминах, документ/файл = запись) -
документ начали сохранять, но не довели дело до конца (откатили транзакцию) счетчик же автоинкремента(/переменная генератора) увеличился т.к. он вне транзакций.
или
данный документ удалили. удалили физически, с последующей упаковкой (т.е. сдурили, раз уж инфа об этих действиях нужна), а не как обычно(/правильно) признак "удалено" поставили.
но никак не "потеряли", как вообще можно потерять запись (раз чегото нет, значит этого нет.)? вот если бы при сбое запись осталась, а данные внутри отсутствовали бы, вот тогда это "потеряли". или есть ссылка на запись в другом месте а записи нет, вот это тоже "потеряли".
а уж того, что "ее никогда не было" такого вообще не может быть, что это вообще значит? раз ее даже не пытались сохранить, то ее не "никогда не было", а "и не создавали даже".
вообще, твое понимание это очередная вариация на тему о том, что порядковые номера записей чтото значат... только вместо порядка записей подменен нумерацией документов.
-
> например, есть у тебя папка (физическая :) с документами
> за №№ от 1200 до 1700. И бумажки № 1234 нету. это о чем
> говорит, о том что ее потеряли или о том что ее никогда
> не было?
как бы номера бумажек базой данных автоматически не генерятся, нет ?
-
> Игорь Шевченко © (28.06.08 22:27) [17]
нет.
или их печатают, а потом ручкой номер ставят? :) однако долго и расходы на стержни огого.
> sniknik © (28.06.08 21:20) [16]
> счетчик же автоинкремента(/переменная генератора) увеличился
> т.к. он вне транзакций.
кого колышет счетчик автоинкремента? кто это слово знает за пределами дельфимастер? :)
в папке нет документа. если нумерация без дырок, значит, его потеряли (съели, кто-то временно взял, нужное подчеркнуть). А если не сквозная - "ну может и не было его".
а на документе могут быть, например, важные пометки ручкой. Например, в накладной "болванки стальные 10 шт." написано "недостача одной, две погнуто, экспедитор подпись, приемщик подпись"
-
> данный документ удалили. удалили физически, с последующей
> упаковкой (т.е. сдурили, раз уж инфа об этих действиях нужна),
> а не как обычно(/правильно) признак "удалено" поставили.
>
первый признак автоматизированного бардака
-
> samalex (27.06.08 14:42)
>
> Пытаюсь вставить в тело процедуры строку
> "ALTER TRIGGER TR_INS_CLIENT INACTIVE;"
Ну, вообще-то можно отключить триггер в процедуре, если уложить базу очень хочется. Найденный тобою подход к решению вопроса - более лучший вариант.
> Petr V. Abramov © (29.06.08 12:59) [19]
>
> первый признак автоматизированного бардака
Не факт, не факт - законодательство-то разно бывает. Если в классическом бухучете (Украина) главное, чтобы не было двух документов с одинаковыми номерами, а там хоть с "дырками" в нумерации, хоть без дырок, то в бухучете у аптекарей в накладных на выдачу наркотических препаратов и прекурсоров за каждую "дырку" можно схлопотать от 3 до 5 с конфискацией.
-
> законодательство-то разно бывает.
так законодательство и рыбу в документы заворачивать не запрещает