Триггер на дабовление данный в другие таблицы, при определенных параметрах

galaxystar
Дата: 03.06.2011 21:41:04
Доброе время суток. Столкнулся с такой проблемой.
Существует таблица в БД "направления" где хранятся наименования направления и различные таблицы тип "журналы"
помогите пожалуйста создать триггер который
например при добавления направления с именем "на умсс/naumss" срабатывал триггер который создавал бы запись в таблицу "Журнал УМСС" и такой тип для каждого имени направления и журнала?
Maxx
Дата: 03.06.2011 22:41:17
а чего ето не делать в процедуре по добавлению записей ???
а что у вас с триггером не выходит - покажите свой триггер, и что клнкретно не работает ?
bilov
Дата: 03.06.2011 22:55:16
galaxystar, что-то типа такого

CREATE TRIGGER Trig1
ON Table1
AFTER INSERT
AS
begin
 declare @FT varchar(50)

 declare curs1 for
 select
 FTablename
 from INSERTED

 open curs1
 while 0=0
 begin
  fetch next from curs1 into @FT
  if @@FETCH_STATUS<>0 break
  exec('IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].['+@FT+']'')'
' INSERT INTO '+@FT+'(F1) VALUES(1234)')  

 end
 close curs1
 deallocate curs1

end
galaxystar
Дата: 04.06.2011 20:16:41
bilov, я не мог разобраться в вашем коде.
такая ситуация
имена записывающиеся в таблицу направления написаны на русском, а таблицы по английски
galaxystar
Дата: 04.06.2011 20:51:51
galaxystar,
вот то что я пытаюсь сделать

ALTER TRIGGER [Insetr_table_napr]
 ON [dbo].[napravlenie] 
FOR INSERT
AS
Declare @name_napr 	varchar(800),
		@kod_nap int
--Select  @name_napr = 'На УМСС'
begin
IF (@name_napr = 'На УМСС') then
from inserted
INSERT INTO dbo.jur_umss(kod_jumss, kod_nap)
VALUES (@kod_nap,@kod_nap)
	end 
Идея такова, при срабатывание триггера он должен смотреть, что добавилось, если добавилось "На УМСС" то надо чтобы в журнале "jur_umss" добавились строка со значениями равными "kod_jumss=kod_nap" и в поле "kod_nap=kod_nap". Если условие не подходит то триггер ничего не делает
iap
Дата: 04.06.2011 21:42:07
galaxystar,

а книжки читать влом, да?
  • Вы знаете, что такое "инициализация переменной"?
  • Где Вы взяли такое: IF ... THEN FROM ... ??? Может, это и не MS Transact SQL?
    Если всё же T-SQL, то советую избегать использования переменных в триггере.
  • galaxystar
    Дата: 04.06.2011 22:32:40
    iap
    galaxystar,

    а книжки читать влом, да?
  • Вы знаете, что такое "инициализация переменной"?
  • Где Вы взяли такое: IF ... THEN FROM ... ??? Может, это и не MS Transact SQL?
    Если всё же T-SQL, то советую избегать использования переменных в триггере.

  • Книги?
    Читать не "ВЛОМ"! Порекомендуйте толковые книги
    Если не хотите помочи человеку так и говорите, я всего лишь прошу помощи.
    Glory
    Дата: 05.06.2011 11:55:58
    Оригинальный хелп продукта уже изучен ?
    http://msdn.microsoft.com/en-us/library/ms189799.aspx
    bilov
    Дата: 05.06.2011 17:48:15
    galaxystar
    bilov, я не мог разобраться в вашем коде.
    такая ситуация
    имена записывающиеся в таблицу направления написаны на русском, а таблицы по английски

    Как вы описали задачу такой я выложил и пример.
    А ваш пример еслия правильно понимаю можно сделать рабочим так
    если есть поле napravlenie.name_napr и napravlenie.kod_nap
    ALTER TRIGGER [Insetr_table_napr]
     ON [dbo].[napravlenie] 
    FOR INSERT
    AS
    Declare @name_napr 	varchar(800),
    		@kod_nap int
    Declare curs1 cursor for
    select name_napr,kod_napr from INSERTED
    
     open curs1
     while 0=0
     begin
      fetch next from curs1 into  @name_napr,@kod_napr 
      if @@FETCH_STATUS<>0 break
    
      IF (@name_napr = 'На УМСС') then
      INSERT INTO dbo.jur_umss(kod_jumss, kod_nap)
      VALUES (@kod_nap,@kod_nap)
    
     end
     close curs1
     deallocate curs1
    
    end
    
    
    
    
    INSERTED
    Дата: 06.06.2011 15:47:41
    bilov
    galaxystar
    bilov, я не мог разобраться в вашем коде.
    такая ситуация
    имена записывающиеся в таблицу направления написаны на русском, а таблицы по английски

    Как вы описали задачу такой я выложил и пример.
    А ваш пример еслия правильно понимаю можно сделать рабочим так
    если есть поле napravlenie.name_napr и napravlenie.kod_nap
    +
    ALTER TRIGGER [Insetr_table_napr]
     ON [dbo].[napravlenie] 
    FOR INSERT
    AS
    Declare @name_napr 	varchar(800),
    		@kod_nap int
    Declare curs1 cursor for
    select name_napr,kod_napr from INSERTED
    
     open curs1
     while 0=0
     begin
      fetch next from curs1 into  @name_napr,@kod_napr 
      if @@FETCH_STATUS<>0 break
    
      IF (@name_napr = 'На УМСС') then
      INSERT INTO dbo.jur_umss(kod_jumss, kod_nap)
      VALUES (@kod_nap,@kod_nap)
    
     end
     close curs1
     deallocate curs1
    
    end
    
    
    
    



    курсор то задлянахрена Картинка с другого сайта.


    INSERT INTO dbo.jur_umss(kod_jumss, kod_nap)
    SELECT  kod_nap,kod_nap from INSERTED where name_napr = 'На УМСС'