Создание триггера, который вытягивает цену из одного стола и предотвращает вход в другой - PullRequest
0 голосов
/ 29 января 2020

Итак, я вроде SQL новичка, который попал в головоломку.

У меня есть база данных, которая настроена на концепцию магазина предметов роскоши. Таблица Products включает в себя поле Price, которое не может быть меньше $ 500 (через триггер). Таблица ProductReceipt имеет ID, ProductID, ReceiptID, Amount, Installments

Я хочу создать триггер, который тянет цену от Products, и если цена выше 600 долларов, вы можете ввести True в Installments. Если он ниже, то он вызывает False или откат в False. Это также должно учитывать поле Amount, поэтому, если что-то стоит 500 долларов, но есть два из указанных пунктов, должна применяться опция Installments.

Я не уверен, как именно go об этом? A Join, возможно?

Таблица Product содержит, например:

ID: 1, Name: Rouge Coco Description: Random Description Price: $500 CompanyID: 1 (in the Company table, 1 is Chanel)

Ответы [ 3 ]

1 голос
/ 29 января 2020

Как вы сказали, вы проектируете данные, так что вы можете справиться с этим, проектируя только базу данных. Я проверил следующее на SQL сервере.

CREATE TABLE Products

(Price int
, Installments AS CASE WHEN Price > 600 THEN 'TRUE'

WHEN Price < 600 THEN 'FALSE'

ELSE NULL END
)
0 голосов
/ 29 января 2020

Попробуйте это

    create table Products123
    (
    ID int, 
    Name varchar(10),
    Description varchar(100),
    Price money,
    CompanyID int
    )
create table ProductReceipt123
( 
ID int, 
ProductID int, 
ReceiptID int, 
Amount money, 
Installments bit
)
    create TRIGGER tInsert 
       ON  Products123
       AFTER INSERT,DELETE
    AS 
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;

        Declare @insertedPrice money,@insertedID int

        select @insertedPrice=Price,@insertedID=ID from inserted

        if(@insertedPrice<500)
        Begin
            delete from Products123 where ID=@insertedID

            select 'Price should be greater than 500'
        End

        else if(@insertedPrice>600)
        Begin

            insert into ProductReceipt123(ProductID,Amount,Installments) values(@insertedID,@insertedPrice,1)

        End
        else if(@insertedPrice<600)
        Begin

            insert into ProductReceipt123(ProductID,Amount,Installments) values(@insertedID,@insertedPrice,0)

        End

        -- Insert statements for trigger here

    END
    GO
0 голосов
/ 29 января 2020

Хотя это не может на 100% ответить на вопрос, который вы описали (не использует триггеры), он будет выполнять ту же работу более эффективно (хотя я и буду исправлен) и с меньшим количеством кода

Ваша причина использования триггера кажется странной, как будто вы должны использовать три триггера ради использования триггеров?

В любом случае, вот ограничение:

ALTER TABLE ProductReceipt ADD CONSTRAINT CK_Installments CHECK ((Amount > 600 AND Installments IN (1,0)) OR (Amount <= 600 AND Installments = 0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...