请帮助我,我有一个简单的案例,让我有点疯狂,我有一个名为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
列时,它会自动触发,从列{{1}中获取/选择数据根据已插入的PRICE
在PRODUCTS
表格中,然后更新表格ID_PRODUCT
中的列PRICE
我是SQL Server的初学者,...我希望你能在这种情况下帮助我,因为我不知道&不知道我要做什么,谢谢
答案 0 :(得分: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
并将行INSERTED
加入PRODUCT
表,允许它插入右PRICE_PRODUCT
。如果需要,你可以为UPDATE
做类似的事情。
另一方面,TRANSACTION
是一个桌子的可怕名称 - 它是reserved word in T-SQL(注意它会被你的编辑和这个网站突出显示?) - 它是语言的一部分,所以我会在对象名称中避免它。
也许这样命名你的表可能会更好:
TRANSACTION -> tbl_Transactions
PRODUCT -> tbl_Products
答案 1 :(得分:0)
您通过在两个连接的表中使用两列(ID 和价格)来重复数据。我建议删除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
没有必要(我看到)存储每个产品的价格和每笔交易的价格