1

请帮帮我,我有一个简单的案例,让我有点疯狂,我有一个表叫PRODUCTS这里是结构

create table PRODUCT (
  ID_PRODUCT CHAR(5) primary key not null,
  NAME_PRODUCT CHAR(30),
  PRICE_PRODUCT integer
)

那么第二个表是TRANSACTION,这里是表结构

create table TRANSACTION (
  ID_TRANSACTION CHAR(5) primary key not null,
  ID_PRODUCT CHAR(30) REFERENCES PRODUCTS(ID_PRODUCT),
  PRICE integer,
  QUANTITY integer
)

之后我想创建一个触发器,当用户将数据填充到表中的ID_PRODUCT列中时TRANSACTIONS,它会自动触发将根据已插入的数据从表中的列PRICE中获取/选择数据,然后更新表中的列PRODUCTSID_PRODUCTPRICETRANSACTIONS

我是 SQL Server 的初学者,......我希望你能在这种情况下帮助我,因为我不知道并且不知道我必须做什么,谢谢

4

2 回答 2

1

像这样的东西可能会做你需要的:

CREATE TRIGGER UpdateTransaction 
ON [TRANSACTION] 
INSTEAD OF INSERT
AS 
BEGIN  

INSERT [TRANSACTION] (ID_TRANSACTION, ID_PRODUCT, PRICE, QUANTITY)
SELECT INSERTED.ID_TRANSACTION, INSERTED.ID_PRODUCT, PRODUCT.PRICE_PRODUCT, INSERTED.QUANTITY
FROM INSERTED
JOIN PRODUCT ON INSERTED.ID_PRODUCT = PRODUCT.ID_PRODUCT

END

它将运行INSTEAD正常的插入并将行加入到INSERTEDPRODUCT中,允许它插入正确的PRICE_PRODUCT. UPDATE如果需要,您可以为 's 做类似的事情。

附带说明一下,TRANSACTION这是一个可怕的表名称 - 它是T-SQL 中的保留字(请注意它被您的编辑器和这个网站突出显示?) - 它是语言的一部分,所以我会在对象中避免它名字。

也许像这样命名你的表可能会更好:

TRANSACTION -> tbl_Transactions
PRODUCT -> tbl_Products
于 2013-05-16T22:22:04.730 回答
0

您通过在两个连接的表(idprice)中有两列来进行数据重复。我建议删除该TRANSACTION.PRICE列。您可以改为创建一个VIEW

CREATE VIEW V_Transaction AS
  SELECT
    TRANSACTION.ID_TRANSACTION,
    TRANSACTION.ID_PRODUCT,
    TRANSACTION.QUANTITY * PRODUCT.PRICE_PRODUCT as PRICE,
    TRANSACTION.QUANTITY
  FROM
    TRANSACTION
    JOIN ID_PRODUCT ON TRANSACTION.ID_PRODUCT = PRODUCT.ID_PRODUCT

(我认为)存储每个产品的价格和每笔交易的价格是没有意义的

于 2013-05-17T01:04:53.780 回答