Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 trigger after insert - insert + update  [new]
alex212121
Member

Откуда:
Сообщений: 54
Всем привет
Прошу помощи

Имеется 2 таблицы, покупки(Сейлс) и склад(Продуктс)
если я делаю инсерт в Сейлс и не указываю Products_ID то значит что такого продукта нету и не было на складе
если я указываю Products_ID значит я знаю что он есть, и даже если там пусто я делаю покупку и хочу чтобы на скоаде прибавилось бы количество продукта

создаю Триггер
Цель такова если я покупаю товар который не находится на складе, и которого там никогда не было, то вместе с инсертом в Сейлс, нужно произвести инсерт в Продуктс, всё получается, но когда ниже пишу else в котором говорится что если такой продукт сузествует на складе, то нужно чтобы на скоаде прибавилось бы количество продукта который только что компания закупила

проблема в том что этот else Триггер не воспринимает.

Прошу профессионалы, закиньте к себе этот код и помогите - что делать?

И нужен именно триггер всё должн опроисходить автоматически,
огромное спасибо

CREATE TABLE Products
(
Products_ID INT NOT NULL PRIMARY KEY IDENTITY(1,1),
name NVARCHAR(100),
description NVARCHAR(100),
sklad INT,
price decimal(19,2)
)


CREATE TABLE Sales
(
Sales_ID INT NOT NULL PRIMARY KEY IDENTITY(1,1),
Product_ID int,
name NVARCHAR(100),
description NVARCHAR(100),
price int ,
kolichestvo INT,
CreateDate DATETIME DEFAULT GETDATE()
)

create trigger dbo.new4
on dbo.Sales
after insert
as 
begin

 if 
    (select Ss.Product_ID from Sales as Ss) is null
    
    return;

	insert into Products  (name, description, sklad, price) Values ((SELECT name FROM INSERTED), (SELECT description FROM INSERTED), (SELECT kolichestvo FROM INSERTED), (SELECT price FROM INSERTED))
  
  ;
 if (select Ss.Product_ID from Sales as Ss) is not null
 
 
  UPDATE Products set sklad=(select sklad from Products where (SELECT Product_ID FROM INSERTED)=Products_ID)+(SELECT kolichsetvo FROM INSERTED)
  ;
  
end


Сообщение было отредактировано: 17 июл 12, 01:14
17 июл 12, 01:07    [12875239]     Ответить | Цитировать Сообщить модератору
 Re: trigger after insert - insert + update  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
В вашем триггере нет ни одного else.
17 июл 12, 01:15    [12875252]     Ответить | Цитировать Сообщить модератору
 Re: trigger after insert - insert + update  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
alex212121
insert into Products  (name, description, sklad, price) Values ((SELECT name FROM INSERTED)
, (SELECT description FROM INSERTED), (SELECT kolichestvo FROM INSERTED), (SELECT price FROM INSERTED))

Это вообще ололо. Вам еще не говорили, что в таблице INSERTED может быть более одно записи?

Сообщение было отредактировано: 17 июл 12, 01:17
17 июл 12, 01:17    [12875259]     Ответить | Цитировать Сообщить модератору
 Re: trigger after insert - insert + update  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Ну уж как минимум, намекали. Но воз и ныне там.
17 июл 12, 01:19    [12875264]     Ответить | Цитировать Сообщить модератору
 Re: trigger after insert - insert + update  [new]
alex212121
Member

Откуда:
Сообщений: 54
create trigger dbo.new4
on dbo.Sales
after insert
as 
begin

 if 
    (select Ss.Product_ID from Sales as Ss) is null
    
    return;

	insert into Products  (name, description, sklad, price) Values ((SELECT name FROM INSERTED), (SELECT description FROM INSERTED), (SELECT kolichestvo FROM INSERTED), (SELECT price FROM INSERTED))
  
  ;
else (select Ss.Product_ID from Sales as Ss) is not null
 
 
  UPDATE Products set sklad=(select sklad from Products where (SELECT Product_ID FROM INSERTED)=Products_ID)+(SELECT kolichsetvo FROM INSERTED)
  ;
  
end


Сообщение было отредактировано: 17 июл 12, 01:28
17 июл 12, 01:28    [12875275]     Ответить | Цитировать Сообщить модератору
 Re: trigger after insert - insert + update  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
А вы символ ";" расставляете где вашей душе угодно? Согласно синтаксису не пробовали?
17 июл 12, 01:29    [12875277]     Ответить | Цитировать Сообщить модератору
 Re: trigger after insert - insert + update  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Вообще, вы точно программист?
17 июл 12, 01:30    [12875280]     Ответить | Цитировать Сообщить модератору
 Re: trigger after insert - insert + update  [new]
alex212121
Member

Откуда:
Сообщений: 54
Гавриленко Сергей Алексеевич,

так я не понял, что тут за насмешки, я учусь. и вместо того чтобы спрашивать на счёт того как я ставлю этот символ, лучше было бы сказать где он должен стоять, чтобы я в второй рахз ен ошибся бы
17 июл 12, 01:37    [12875304]     Ответить | Цитировать Сообщить модератору
 Re: trigger after insert - insert + update  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
F1, читать синтаксис и смотреть примеры.

З.Ы. Копипастить ваш изначальный вопрос по 10 раз не надо.
17 июл 12, 02:29    [12875387]     Ответить | Цитировать Сообщить модератору
 Re: trigger after insert - insert + update  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
alex212121
проблема в том что этот else Триггер не воспринимает.
Не нашёл в тексте вашего триггера слово else :-(


alex212121
создаю Триггер
Цель такова если я покупаю товар который не находится на складе, и которого там никогда не было, то вместе с инсертом в Сейлс, нужно произвести инсерт в Продуктс, всё получается, но когда ниже пишу else в котором говорится что если такой продукт сузествует на складе, то нужно чтобы на скоаде прибавилось бы количество продукта который только что компания закупила

Для начала триггер вообще неправильный.

Смысл непонятен, я даже не могу описать, что эти 2 строки могут означать... :
if 
    (select Ss.Product_ID from Sales as Ss) is null

Вы почитайте в хелпе в статье CREATE TRIGGER про псевдотаблицы inserted и deleted, посмотрите примеры.
17 июл 12, 08:16    [12875617]     Ответить | Цитировать Сообщить модератору
 Re: trigger after insert - insert + update  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
alex212121
Гавриленко Сергей Алексеевич,

так я не понял, что тут за насмешки, я учусь. и вместо того чтобы спрашивать на счёт того как я ставлю этот символ, лучше было бы сказать где он должен стоять, чтобы я в второй рахз ен ошибся бы
А, во втором примере увидел else :-)

Символ ; вообще уберите, он вам пока не нужен. Ещё назначение return непонятно...
17 июл 12, 08:18    [12875621]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить