Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Создать триггеры изменения данных для таблицы аудита с добавлением даты и пользователя  [new]
Денчик
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]     Ответить | Цитировать Сообщить модератору
 Re: Создать триггеры изменения данных для таблицы аудита с добавлением даты и пользователя  [new]
_djХомяГ
Guest
FROM Updated 

есть Inserted, Deleted

@UnitPrice=UnitPrice  ----пропущена запятая


А вообще если в таблицах будут несколько записей - переменные не помогут
26 мар 13, 17:21    [14098203]     Ответить | Цитировать Сообщить модератору
 Re: Создать триггеры изменения данных для таблицы аудита с добавлением даты и пользователя  [new]
Гость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]     Ответить | Цитировать Сообщить модератору
 Re: Создать триггеры изменения данных для таблицы аудита с добавлением даты и пользователя  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2576
Денчик
Триггер Insert я создал
Интересно было бы посмотреть...
26 мар 13, 17:29    [14098240]     Ответить | Цитировать Сообщить модератору
 Re: Создать триггеры изменения данных для таблицы аудита с добавлением даты и пользователя  [new]
Денчик
Member

Откуда:
Сообщений: 9
Гость333
Денчик,

1) Типов данных int(4), money(8), smallint(2) и bit(1) не существует.
2) Updated — что за таблица?
3) Команда UPDATE может обработать более одной записи за один приём — при этом триггер будет вызван один раз. У вас эта ситуация никак не обрабатывается;
4) "UPDATE Product_audit" — в таком виде, как у вас написано, обновятся все записи этой таблицы. Вряд ли это то, что вы хотите сделать.



1) Убрал длину в скобках покатило
2) Это не таблица это вид триггера
3) Расскажите плиз как сделать так чтобы при обновлении определенной строки в таблице Products меняло только ту же строку в Product_audit а не все строки столбца ?
26 мар 13, 17:39    [14098317]     Ответить | Цитировать Сообщить модератору
 Re: Создать триггеры изменения данных для таблицы аудита с добавлением даты и пользователя  [new]
Денчик
Member

Откуда:
Сообщений: 9
PaulYoung
Денчик
Триггер Insert я создал
Интересно было бы посмотреть...




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]     Ответить | Цитировать Сообщить модератору
 Re: Создать триггеры изменения данных для таблицы аудита с добавлением даты и пользователя  [new]
_djХомяГ
Guest
автор
Расскажите плиз как сделать так чтобы при обновлении определенной строки в таблице Products меняло только ту же строку в Product_audit а не все строки столбца


Написать корректное условие ON ...WHERE ......
26 мар 13, 17:42    [14098333]     Ответить | Цитировать Сообщить модератору
 Re: Создать триггеры изменения данных для таблицы аудита с добавлением даты и пользователя  [new]
Денчик
Member

Откуда:
Сообщений: 9
_djХомяГ
FROM Updated 

есть Inserted, Deleted

@UnitPrice=UnitPrice  ----пропущена запятая


А вообще если в таблицах будут несколько записей - переменные не помогут



Спасибо поправил знаки, а как тогда написать рабочий скриптец ?
26 мар 13, 17:43    [14098339]     Ответить | Цитировать Сообщить модератору
 Re: Создать триггеры изменения данных для таблицы аудита с добавлением даты и пользователя  [new]
Glory
Member

Откуда:
Сообщений: 104751
Денчик
2) Это не таблица это вид триггера

FROM Updated - это не таблица ??? А вид триггера ???

Денчик
3) Расскажите плиз как сделать так чтобы при обновлении определенной строки в таблице Products меняло только ту же строку в Product_audit а не все строки столбца ?

А почему при UPDATE в таблице аудита должны заменяться уже существующие данные ?
У вас какой то своеобразный аудит ?
26 мар 13, 17:43    [14098340]     Ответить | Цитировать Сообщить модератору
 Re: Создать триггеры изменения данных для таблицы аудита с добавлением даты и пользователя  [new]
Денчик
Member

Откуда:
Сообщений: 9
Glory
Денчик
2) Это не таблица это вид триггера

FROM Updated - это не таблица ??? А вид триггера ???

Денчик
3) Расскажите плиз как сделать так чтобы при обновлении определенной строки в таблице Products меняло только ту же строку в Product_audit а не все строки столбца ?

А почему при UPDATE в таблице аудита должны заменяться уже существующие данные ?
У вас какой то своеобразный аудит ?


FROM Updated на счет этого я даже не знаю что это подсказали просто на форуме.

Ну вот такую задачу мне поставили теперь корячусь)))
26 мар 13, 17:47    [14098366]     Ответить | Цитировать Сообщить модератору
 Re: Создать триггеры изменения данных для таблицы аудита с добавлением даты и пользователя  [new]
Glory
Member

Откуда:
Сообщений: 104751
Денчик
FROM Updated на счет этого я даже не знаю что это подсказали просто на форуме.

Мда уж. Т.е. вы не знаете, что надо писать после FROM что ли ?

Денчик
Ну вот такую задачу мне поставили теперь корячусь

Какую - такую ?
Задачу в аудите держать только одно последнее изменение ?
26 мар 13, 17:49    [14098375]     Ответить | Цитировать Сообщить модератору
 Re: Создать триггеры изменения данных для таблицы аудита с добавлением даты и пользователя  [new]
Денчик
Member

Откуда:
Сообщений: 9
Glory
Денчик
FROM Updated на счет этого я даже не знаю что это подсказали просто на форуме.

Мда уж. Т.е. вы не знаете, что надо писать после FROM что ли ?

Денчик
Ну вот такую задачу мне поставили теперь корячусь

Какую - такую ?
Задачу в аудите держать только одно последнее изменение ?


Я же написал что не очень опытен в этом деле по тому и не все знаю.

Да последние причем с именем пользователя и датой в других колонках Date и User
26 мар 13, 18:04    [14098447]     Ответить | Цитировать Сообщить модератору
 Re: Создать триггеры изменения данных для таблицы аудита с добавлением даты и пользователя  [new]
Glory
Member

Откуда:
Сообщений: 104751
Денчик
Я же написал что не очень опытен в этом деле по тому и не все знаю.

Ну так начните с изучения синтаксиса тогда что ли.
А не с написания реальных триггеров.
26 мар 13, 18:09    [14098463]     Ответить | Цитировать Сообщить модератору
 Re: Создать триггеры изменения данных для таблицы аудита с добавлением даты и пользователя  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Денчик
Да последние причем с именем пользователя и датой в других колонках Date и User

А зачем в таком случае нужна таблица аудита? Добавьте в таблицу Products столбцы с датой последнего изменения и пользователем, его инициировавшим.
26 мар 13, 18:18    [14098496]     Ответить | Цитировать Сообщить модератору
 Re: Создать триггеры изменения данных для таблицы аудита с добавлением даты и пользователя  [new]
Glory
Member

Откуда:
Сообщений: 104751
Денчик
Да последние причем с именем пользователя и датой в других колонках Date и User

Зачем тогда триггер на INSERT что то длбавляет в таблицу аудита ?
При INSERT-е ведь никаких изменений текущей записи не происходит
26 мар 13, 18:21    [14098505]     Ответить | Цитировать Сообщить модератору
 Re: Создать триггеры изменения данных для таблицы аудита с добавлением даты и пользователя  [new]
Денчик
Member

Откуда:
Сообщений: 9
Ребята всем спасибо разрулил тему
1 апр 13, 12:52    [14121098]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить