3

ここに3つのテーブルがあります:

    Book [Id] [UnitPrice]
    BookOrder [Id] [BookId] [Quantity]
    BookInvoice [Id] [OrderId] [TotalPrice]

要件は、Book テーブルから UnitPrice を取得することです。

    UnitPrice * Quantity = TotalPrice

私はSQLの初心者で、これが私のコードです:

    CREATE TRIGGER TR_TotalPrice
    ON BookInvoice *--Is that correct?*
    FOR UPDATE, INSERT
    AS
    UPDATE BookInvoice SET TotalPrice = Book.Price * BookOrder.Number
    FROM Book, BookOrder

....

そして、これらのコードを完成させる方法がわかりません。みんなが私を助けてくれることを願っています、ありがとう。

4

3 に答える 3

1

他のテーブルの値を使用して値を導出できるため、TotalPriceBookInvoiceテーブルに格納する必要はありません。

select Book.Price * BookOrder.Quantity as TotalPrice 
from Book 
join BookOrder
on BookOrder.BookId=Book.id
于 2012-11-14T11:43:15.873 に答える
0

トリガーを使用できます

CREATE TRIGGER TR_TotalPrice ON BookInvoice
FOR UPDATE, INSERT
AS
begin
    update BookInvoice set 
        TotalPrice = B.Price * BO.Number
    from inserted as i
        inner join BookInvoice as BI on BI.Id = i.Id
        inner join BookOrder as BO on BO.Id = i.OrderId
        inner join Book as B on B.Id = BO.BookId
end

または、単にビューを使用することもできます。より正規化されていますが、書籍Priceが変更TotalPriceされると、その書籍のすべての請求書も変更されます

create view vw_BookInvoice
as
   select
        BI.Id,
        BI.OrderId,
        B.Price * BO.Number as TotalPrice 
   from BookInvoice as BI
        inner join BookOrder as BO on BO.Id = i.OrderId
        inner join Book as B on B.Id = BO.BookId
于 2012-11-14T11:40:13.280 に答える
0

トリガーを使用する必要がある場合は、すべてのケースをカバーするトリガーを作成する必要があります。たとえば、書籍の UnitPrice が変更された場合にテーブル BookInvoice を更新します。または、テーブル BookOrder などで Quantity が変更された場合でも。

トリガーを使用する代わりに、必要な値を即座に計算するビューを使用する必要があります。何かのようなもの:

SELECT b.id, bo.id, bo.quantity * b.uniprice TotalPrice
FROM BOOK b, BookOrder BO, BookInvoice BI
WHERE BO.Id = BI.OrderId
AND B.Id = BO.BookId
于 2012-11-14T11:49:00.243 に答える