Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.20;
Скачать: CL | DM;

Вниз

MS SQL 2000   Найти похожие ветки 

 
андр.   (2008-06-04 10:52) [0]

Необходимо в триггере узнать тип известного столбца. Кто сталкивался ?


 
Правильный_Вася   (2008-06-04 10:55) [1]

а что, триггер пишется на таблицу, которая еще неизвестна?


 
андр.   (2008-06-04 10:59) [2]

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


 
Ega23 ©   (2008-06-04 11:16) [3]


select column_name, is_nullable, data_type from INFORMATION_SCHEMA.COLUMNS where table_name=:table_name and column_name=:column_name


 
андр.   (2008-06-04 11:27) [4]


> Ega23 ©   (04.06.08 11:16) [3]

спс.

Чтоб ветку не создавать тута вопрос задам:

Это просто к примеру тригер...

CREATE TRIGGER [trgLog] ON [dbo].[tLog]
FOR INSERT, UPDATE, DELETE
AS
 DECLARE
   @IdLog int

 IF EXISTS (SELECT * FROM Inserted)
   BEGIN
   END
 ELSE
   IF EXISTS (SELECT * FROM Deleted)
     BEGIN
     END


Вопрос в следующем: Стот ли перепроверять существуют данные для удоления, если в тригере в результат существования данных для вставки отрицательный ? Т.е.:

CREATE TRIGGER [trgLog] ON [dbo].[tLog]
FOR INSERT, UPDATE, DELETE
AS
 DECLARE
   @IdLog int

 IF EXISTS (SELECT * FROM Inserted)
   BEGIN
   END
 ELSE
   BEGIN
   END


 
Ega23 ©   (2008-06-04 11:30) [5]

А ты посмотри, каким образом триггер на Update работает.


 
андр.   (2008-06-04 11:35) [6]


> Ega23 ©   (04.06.08 11:30) [5]

Ну на UPDATE я так сделаю:

CREATE TRIGGER [trgLog] ON [dbo].[tLog]
FOR INSERT, UPDATE, DELETE
AS
 DECLARE
   @IdLog int

 IF EXISTS (SELECT * FROM Inserted)
   BEGIN
     IF NOT EXISTS (SELECT * FROM Deleted)
       BEGIN
         --Вставка записи
       END
     ELSE
       BEGIN
         --Обновление записи
       END
   END
 ELSE
   IF EXISTS (SELECT * FROM Deleted) -- Вот это интересно не лишнее будет ?
     BEGIN
       --Удаление записи
     END


 
wicked ©   (2008-06-04 11:38) [7]


> IF EXISTS (SELECT * FROM Deleted) -- Вот это интересно не
> лишнее будет ?

нет, поскольку триггер у тебя для
> FOR INSERT, UPDATE, DELETE


 
wicked ©   (2008-06-04 11:39) [8]

то есть - нет, не лишнее :)
ибо
есть Inserted, нет Deleted - у нас insert
есть Inserted, есть Deleted - у нас update
нет Inserted, есть Deleted - у нас delete


 
Ega23 ©   (2008-06-04 11:39) [9]

Если по логике смотреть, то вроде как лишнее...


 
Ega23 ©   (2008-06-04 11:40) [10]


> ибо
> есть Inserted, нет Deleted - у нас insert
> есть Inserted, есть Deleted - у нас update
> нет Inserted, есть Deleted - у нас delete


Четвёртого-то варианта (нет inserted, нет deleted) - нету...


 
wicked ©   (2008-06-04 11:42) [11]


> Четвёртого-то варианта (нет inserted, нет deleted) - нету.
> ..

да я уже увидел, что там deleted два раза отрабатывается
не внимательный :)


 
андр.   (2008-06-04 11:46) [12]


> wicked ©   (04.06.08 11:38) [7]

Ну если триггер срабатывает при INSERT, UPDATE, DELETE, тогда получается если нет таблицы Inserted, тогда полюбому есть таблица Deleted, и проверка вроде
ELSE
  IF EXISTS (SELECT * FROM Deleted) -- Вот это интересно не лишнее будет ?
    BEGIN
      --Удаление записи
    END
становится какбы лишняя, потомучто триггер UPDATE срабатывает непосредственно при имеющихся таблицах Inserted и Deleted (То что было и то что стало)

Или я неправ, и конструкцию вида:

ELSE
  IF EXISTS (SELECT * FROM Deleted) -- Вот это интересно не лишнее будет ?
    BEGIN
      --Удаление записи
    END


всеже тучше оставить, так сказать на всякий-який... ???


 
Ega23 ©   (2008-06-04 11:49) [13]

Мне тут вот чё непонятно: нафига на Update? Что это за лог такой, который апдейтить можно?


 
wicked ©   (2008-06-04 11:50) [14]

> андр.   (04.06.08 11:46) [12]
говорю ж - не доглядел
хорошо там у тебя, условие можно убрать


 
андр.   (2008-06-04 11:53) [15]


> Ega23 ©   (04.06.08 11:49) [13]

Не, не это я просто конструкцию поставил такую для примера, а так триггер в других таблицах использоваться будет....

Можно конечно использовать тригер и на таблице логов следующим образомЖ

CREATE TRIGGER [trgLog] ON [dbo].[tLog]
FOR INSERT, UPDATE, DELETE
AS
DECLARE
  @IdLog int

IF EXISTS (SELECT * FROM Inserted)
  BEGIN
    IF NOT EXISTS (SELECT * FROM Deleted)
      BEGIN
        --Вставка записи
      END
    ELSE
      BEGIN
        --Обновление записи
        ROLLBACK
      END
  END
ELSE
  IF EXISTS (SELECT * FROM Deleted) -- Вот это интересно не лишнее будет ?
    BEGIN
      --Удаление записи
      ROLLBACK
    END


:o)


 
андр.   (2008-06-04 12:01) [16]


> Ega23 ©   (04.06.08 11:49) [13]

Извини, так что посоветуешь. Убрать конструкцию:

ELSE
 IF EXISTS (SELECT * FROM Deleted) -- Вот это интересно не лишнее будет ?
   BEGIN
     --Удаление записи
     ROLLBACK
   END


или оставить на всякий-який ?


 
Ega23 ©   (2008-06-04 12:02) [17]

Честно - не знаю. Наверное убрать. Но - помнить, что убрал.  :)


 
андр.   (2008-06-04 12:04) [18]


> Ega23 ©   (04.06.08 12:02) [17]

Спс. :o)


 
андр.   (2008-06-04 14:18) [19]

Сорри возвращаюсь к теме...

В нутри этого же триггера, необходимо добавить блокировки на добавления в tLog, для того чтобы, если уменя логиррование происходит в тригеррах например двух или трех таблиц одновременно, чтоб просто ставил в ожидание. Ну это говарю еще раз для исключения ошибок одновременного добавления в таблицу tLog. Посоветуйте "кодом" как это реализовать транзакциями.

Заранее огромное спасибо !

Вот шаблон:

CREATE TRIGGER [trgLog] ON [dbo].[tLog]
FOR INSERT, UPDATE, DELETE
AS
DECLARE
 @IdLog int

IF EXISTS (SELECT * FROM Inserted)
 BEGIN
   IF NOT EXISTS (SELECT * FROM Deleted)
     BEGIN
       --Вставка записи
       --Может сюда что-то типа OPEN TRANSACTION
       --Что-то делаем
       --А сюда что-то типа CLOSE TRANSACTION
       --???
     END
   ELSE
     BEGIN
       --Обновление записи
       ROLLBACK
     END
 END
ELSE
 IF EXISTS (SELECT * FROM Deleted) -- Вот это интересно не лишнее будет ?
   BEGIN
     --Удаление записи
     ROLLBACK
   END


 
андр.   (2008-06-04 14:50) [20]

???



Страницы: 1 вся ветка

Текущий архив: 2008.07.20;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.022 c
15-1211392855
MsGuns
2008-05-21 22:00
2008.07.20
Существует ли в ВУЗах оцентка "кол" за курсовой проект ?


2-1213699641
Alex_C
2008-06-17 14:47
2008.07.20
Маштабирование окна


2-1213942409
TUserClass
2008-06-20 10:13
2008.07.20
Путь к своей DLL ...


2-1213690361
lewka-serdceed
2008-06-17 12:12
2008.07.20
переименование файла


15-1212355196
panov
2008-06-02 01:19
2008.07.20
Автоматическая регистрилка