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

Откуда:
Сообщений: 9
Добрый день, помогите реализовать следующее. Есть две таблицы. Нужно реализовать следующее:
Чтобы при вставке данных в таблицу pereocenka, автоматические считалась стоимость исходя из того что
у каждого предмета имущества есть срок службы (life_time), дата начала службы(date_start) и его исходная стоимость (cost_initial), каждый год происходит переоценка и взависимости от того срока сколько прошло со срока его стоимость меняеться и заноситься в pereocenka.cost_after и дублируется в таблицу imushestvo.cost_before для следующей переоценки, при том если срок службы вышел, то предмет удаляется(его строка с данными)

К сообщению приложен файл. Размер - 7Kb
31 окт 16, 18:32    [19843421]     Ответить | Цитировать Сообщить модератору
 Re: Триггер и процедура  [new]
EEEgor
Member

Откуда:
Сообщений: 9
CREATE PROCEDURE newz
(
	@costyear DATE
)
AS
BEGIN 

INSERT INTO pereocenka (pereocenka.costyear)
VALUES (@costyear)

END
RETURN
-------------------------------------------
EXECUTE newz @costyear = "10.10.2016"


CREATE TRIGGER per ON pereocenka
FOR INSERT
AS
IF @@RowCount=0
RETURN
IF @@RowCount>1
BEGIN
RAISERROR('Ошибка!',16,1)
ROLLBACK TRAN
RETURN
END

DECLARE @date AS DATE
	SELECT  @date=GETDATE()

	DECLARE @cost_after AS DEC(8,2)
	SELECT @cost_after FROM inserted--pereocenka

	DECLARE @date_start AS DATE
	SELECT  @date_start FROM inserted--imushestvo

	DECLARE @cost_initial AS DEC(8,2)
	SELECT  @cost_initial=cost_initial FROM imushestvo

	DECLARE @life_time AS INT
	SELECT  @life_time=life_time FROM imushestvo

	DECLARE @dif AS INT
	SELECT  @dif=DATEDIFF(year,@date,@date_start)

	DECLARE @r AS INT
	SELECT @r=(@life_time*100)/@dif

	IF (@r BETWEEN 0 AND 15)
		BEGIN
		SELECT @cost_after = @cost_initial*1
		UPDATE pereocenka
	    SET cost_after=@cost_after
		RETURN
		END
	IF (@r BETWEEN 15 AND 35)
		BEGIN
		SELECT @cost_after = @cost_initial*0.8
		END
	IF (@r BETWEEN 35 AND 50)
		BEGIN
		SELECT @cost_after = @cost_initial*0.6
		END
	IF (@r BETWEEN 50 AND 75)
		BEGIN
		SELECT @cost_after = @cost_initial*0.3
		END
	IF (@r BETWEEN 75 AND 99)
		BEGIN
		SELECT @cost_after = @cost_initial*0.1
		END
	/*IF (@r <= 100)
		BEGIN
		END
	UPDATE pereocenka
	SET cost_after=@cost_after*/
31 окт 16, 18:34    [19843428]     Ответить | Цитировать Сообщить модератору
 Re: Триггер и процедура  [new]
EEEgor
Member

Откуда:
Сообщений: 9
Пытался так
31 окт 16, 18:34    [19843429]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить