Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MS SQL 2000 / 10 сообщений из 10, страница 1 из 1
28.10.2002, 13:05:49
    #32062316
radik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL 2000
Привет люди.
Подскажите триггерок - я этим никогда не занимался.

Мне надо написать триггерок на вставку такого плана.

При добавлении данных в таблицу Приход(IdТовар, дата, количество) срабатывает триггер и изменяет Остатки(IdТовар, остаток).

Как теоретически это сделать я знаю.

Найти IdТовар в таблице Остатки и остаток=остаток+количество, но как это сделать на MS SQL не знаю.

Напишите как мне это сделать плиз.
...
Рейтинг: 0 / 0
28.10.2002, 13:16:45
    #32062323
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL 2000
Проще всего это сделать в EM (Enterprise Manager) через контекстное меню таблицы.

Прочитайте в BOL описание "CREATE TRIGGER" и "Using the inserted and deleted Tables" для понимания тонкостей реализации.
...
Рейтинг: 0 / 0
28.10.2002, 13:34:46
    #32062333
Faza
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL 2000
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
[/src]create trigger TrgI_prihod on Приход
for insert
update Остатки set остаток = o.остаток + p.количество
from Остатки o, Приход p where p.IdТовар = o.IdТовар
if @@rowcount = o
	insert into Остатки (IdTovar, остаток) 
		select IdTovar, количество from inserted
[src]
...
Рейтинг: 0 / 0
29.10.2002, 13:53:50
    #32062697
radik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL 2000
thanks
...
Рейтинг: 0 / 0
29.10.2002, 13:56:01
    #32062700
radik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL 2000
А как же транзакции ?
...
Рейтинг: 0 / 0
29.10.2002, 13:59:40
    #32062702
Faza
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL 2000
insert - вызывает неявную трранзакцию. Триггер выполняется внутри неё Не выполнится триггер, не выполнится и insert.
...
Рейтинг: 0 / 0
29.10.2002, 14:43:39
    #32062738
radik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL 2000
не работает твой триггерочек правильно. я его подредактировал.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TRIGGER [Изменение остатка] ON dbo.Приход
AFTER INSERT
AS
DECLARE @Amount int
DECLARE @GoodID numeric
SELECT @GoodID=[Код товара],@Amount=[Количество] from INSERTED

UPDATE [ОстаткиИнвентаризации]
	SET [Остаток] = [Остаток]+@Amount
	from [ОстаткиИнвентаризации]
	WHERE [Код товара]=@GoodID

IF @@rowcount =  0 
	INSERT INTO [ОстаткиИнвентаризации]([Код товара], [Остаток]) 
		SELECT [Код товара], [Количество] from INSERTED


так работает. Но насколько это правильно с точки зрения администратора БД. и еЩЕ что за функция rowcount ?
...
Рейтинг: 0 / 0
29.10.2002, 15:25:54
    #32062771
Faza
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL 2000
твой триггер не заработает при массовом добавлении. :)
извини, я ошибку сделал. В Insert'е указывается from Остатки o, INSERTED p
...
Рейтинг: 0 / 0
29.10.2002, 15:27:02
    #32062772
Faza
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL 2000
опять ошибка: в update'е укзазывается Остатки o, INSERTED p
...
Рейтинг: 0 / 0
29.10.2002, 15:30:18
    #32062777
Faza
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MS SQL 2000
@@rowcount - возвращенное, использованное, измененное и т.д. количество строк.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / MS SQL 2000 / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]