Привет хабр!
Пытаюсь создать триггер в ms sql server 2005
IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE Name = 'INSERT_TR_table' AND type = 'TR')
CREATE TRIGGER INSERT_TR_table ON table1
FOR INSERT
AS
DECLARE @temp_row
DECLARE @pkey int
select @pkey = ID from inserted;
SET @temp_row = SELECT top 1 * FROM table1 WHERE ID = @pkey
IF EXISTS (@temp_row)
UPDATE table1 SET
ID = case(inserted.ID) when '' then @temp_row.ID when null then @temp_row.ID else inserted.ID end,
field1 = case(inserted.field1) when '' then @temp_row.field1 when null then @temp_row.field1 else inserted.field1 end,
WHERE ID = @pkey
ELSE
INSERT INTO table1 (ID,field1)
select * from inserted;
GO
вижу горку ошибок…
Msg 156, Level 15, State 1, Line 38
Incorrect syntax near the keyword 'TRIGGER'.
Msg 156, Level 15, State 1, Line 45
Incorrect syntax near the keyword 'SELECT'.
Msg 102, Level 15, State 1, Line 47
Incorrect syntax near '@temp_row'.
Msg 137, Level 15, State 2, Line 49
Must declare the scalar variable "@temp_row".
точно знаю, что нужно присвоить какой-то тип переменной @temp_row, но какой ума не приложу. Там должна содержаться исходная строка. Может быть так в ms sql вообще нельзя? Облазил сегодня все поисковики, информации много но того, что нужно не нашел. Смысл триггера прост. Если запись есть, она обновляется, при условии, что новое поле не пустое, если строки нет, то она вставляется.
В ms sql, не смыслю почти ничего, облазил msdn, ничего путного не нашел.
Почему триггер? Обновлять нужно почти 200к записей в 28 таблицах, плюс, есть вероятность переезда на другой сервер, поэтому триггеры создаю прямо в тексте файла с инсертами, для каждой таблицы индивидуально. Возможно, такой подход не правильный, если кто-то подскажет более рациональный буду благодарен. Важным моментом является то, что работать нужно с ms sql server 2005, где нету многих возможностей.