Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Денчик Member Откуда: Сообщений: 9 |
Ребята выручайте нужно сделать следующее: Создать триггеры на таблицу Products записывающие все изменения в данных в таблицу Products_audit, добавляя к данным дату и имя пользователя сделавшего изменения в колонки Date и User таблицы Products_audit Триггер Insert я создал Когда создаю триггер на Update: CREATE TRIGGER Super1 ON Products AFTER Update AS BEGIN DECLARE @ProductID int (4), @ProductName nvarchar (40), @SupplierID varchar (4), @CategoryID int (4), @QuantityPerUnit int (4), @UnitPrice money (8), @UnitsInStock smallint (2), @UnitsOnOrder smallint (2), @ReorderLevel smallint (2), @Discontinued bit (1) SELECT @ProductID=ProductID, @ProductName=ProductName, @SupplierID=upplierID, @CategoryID=CategoryID, @QuantityPerUnit=QuantityPerUnit, @UnitPrice=UnitPrice @UnitsInStock=UnitsInStock, @UnitsOnOrder=UnitsOnOrder, @ReorderLevel=ReorderLevel, @Discontinued=Discontinued FROM Updated UPDATE Product_audit SET ProductID=@ProductID, ProductName=@ProductName, SupplierID=@SupplierID, CategoryID=@CategoryID, QuantityPerUnit=@QuantityPerUnit, UnitPrice=@UnitPrice UnitsInStock=@UnitsInStock, UnitsOnOrder=@UnitsOnOrder, ReorderLevel=@ReorderLevel, Discontinued=@Discontinued FROM Updated END Получаю следующее: Server: Msg 170, Level 15, State 1, Procedure Super1, Line 29 Line 29: Incorrect syntax near '@UnitsInStock'. Server: Msg 170, Level 15, State 1, Procedure Super1, Line 46 Line 46: Incorrect syntax near 'UnitsInStock'. Не пойму где ошибка ? А вот для вставки в столбцы Date и User нашел вот что: CREATE TRIGGER Super2 ON Products FOR INSERT, UPDATE AS UPDATE c SET UpdateDate = getdate(), UpdatedBy = SYSTEM_USER FROM inserted i INNER JOIN dbo.Components c ON i.Iden = c.Iden Вот только не могу понять как это применить к моему случаю ? Помогите чем можете и сильно не ругайте я новичок в этом деле. Всем заранее спасибо. Сообщение было отредактировано: 26 мар 13, 17:28 |
26 мар 13, 17:15 [14098160] Ответить | Цитировать Сообщить модератору |
_djХомяГ
Guest |
FROM Updated
есть Inserted, Deleted @UnitPrice=UnitPrice ----пропущена запятая А вообще если в таблицах будут несколько записей - переменные не помогут |
26 мар 13, 17:21 [14098203] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Денчик, 1) Типов данных int(4), money(8), smallint(2) и bit(1) не существует. 2) Updated — что за таблица? 3) Команда UPDATE может обработать более одной записи за один приём — при этом триггер будет вызван один раз. У вас эта ситуация никак не обрабатывается; 4) "UPDATE Product_audit" — в таком виде, как у вас написано, обновятся все записи этой таблицы. Вряд ли это то, что вы хотите сделать. |
26 мар 13, 17:24 [14098223] Ответить | Цитировать Сообщить модератору |
PaulYoung Member Откуда: Москва Сообщений: 2565 |
|
||
26 мар 13, 17:29 [14098240] Ответить | Цитировать Сообщить модератору |
Денчик Member Откуда: Сообщений: 9 |
1) Убрал длину в скобках покатило 2) Это не таблица это вид триггера 3) Расскажите плиз как сделать так чтобы при обновлении определенной строки в таблице Products меняло только ту же строку в Product_audit а не все строки столбца ? |
||
26 мар 13, 17:39 [14098317] Ответить | Цитировать Сообщить модератору |
Денчик Member Откуда: Сообщений: 9 |
CREATE TRIGGER Super ON Products AFTER INSERT AS BEGIN INSERT INTO Product_audit (ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued) SELECT ProductID, ProductName, SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued FROM Inserted END |
||||
26 мар 13, 17:40 [14098327] Ответить | Цитировать Сообщить модератору |
_djХомяГ
Guest |
Написать корректное условие ON ...WHERE ...... |
||
26 мар 13, 17:42 [14098333] Ответить | Цитировать Сообщить модератору |
Денчик Member Откуда: Сообщений: 9 |
Спасибо поправил знаки, а как тогда написать рабочий скриптец ? |
||
26 мар 13, 17:43 [14098339] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
FROM Updated - это не таблица ??? А вид триггера ???
А почему при UPDATE в таблице аудита должны заменяться уже существующие данные ? У вас какой то своеобразный аудит ? |
||||
26 мар 13, 17:43 [14098340] Ответить | Цитировать Сообщить модератору |
Денчик Member Откуда: Сообщений: 9 |
FROM Updated на счет этого я даже не знаю что это подсказали просто на форуме. Ну вот такую задачу мне поставили теперь корячусь))) |
||||||
26 мар 13, 17:47 [14098366] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Мда уж. Т.е. вы не знаете, что надо писать после FROM что ли ?
Какую - такую ? Задачу в аудите держать только одно последнее изменение ? |
||||
26 мар 13, 17:49 [14098375] Ответить | Цитировать Сообщить модератору |
Денчик Member Откуда: Сообщений: 9 |
Я же написал что не очень опытен в этом деле по тому и не все знаю. Да последние причем с именем пользователя и датой в других колонках Date и User |
||||||
26 мар 13, 18:04 [14098447] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Ну так начните с изучения синтаксиса тогда что ли. А не с написания реальных триггеров. |
||
26 мар 13, 18:09 [14098463] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
А зачем в таком случае нужна таблица аудита? Добавьте в таблицу Products столбцы с датой последнего изменения и пользователем, его инициировавшим. |
||
26 мар 13, 18:18 [14098496] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Зачем тогда триггер на INSERT что то длбавляет в таблицу аудита ? При INSERT-е ведь никаких изменений текущей записи не происходит |
||
26 мар 13, 18:21 [14098505] Ответить | Цитировать Сообщить модератору |
Денчик Member Откуда: Сообщений: 9 |
Ребята всем спасибо разрулил тему |
1 апр 13, 12:52 [14121098] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |