写一个SQLserver触发器,要求如下:收发货表的主码为“订单ID”,当在“收发货表”中“金额”列某行插入money类型的数据时,若金额大于100,则“收发货表”的折扣列对应的行改为10,若金额大于200,则收发货表的折扣列对应的行会变成20.
时间: 2023-12-03 09:47:43 浏览: 59
可以参考如下SQLserver触发器代码:
```
CREATE TRIGGER tr_Update_Discount
ON [dbo].[Shipment] --收发货表
FOR INSERT, UPDATE --插入、更新操作触发
AS
BEGIN
--如果插入、更新的金额列大于100
IF (SELECT [Amount] FROM inserted) > 100
BEGIN
--折扣列对应的行改为10
UPDATE [dbo].[Shipment] SET [Discount] = 10 WHERE [OrderID] IN (SELECT [OrderID] FROM inserted)
END
--如果插入、更新的金额列大于200
IF (SELECT [Amount] FROM inserted) > 200
BEGIN
--折扣列对应的行改为20
UPDATE [dbo].[Shipment] SET [Discount] = 20 WHERE [OrderID] IN (SELECT [OrderID] FROM inserted)
END
END
```
这个触发器会在插入或更新“收发货表”的数据时,检查新插入或更新的行的“金额”是否大于100或200,如果是,则将该行对应的“折扣”列改为10或20。需要注意的是,这个触发器只会触发一次,即使插入或更新多行数据。
相关问题
SQLserver网上购物系统 创建触发器,当订单表中的订单状态更改为待收货时,更改商品表中的商品库存
可以使用以下代码创建一个触发器,它会在订单状态更改为“待收货”时,自动减少商品表中相应商品的库存:
```
CREATE TRIGGER update_inventory
ON orders
AFTER UPDATE
AS
BEGIN
IF UPDATE(order_status) AND (SELECT order_status FROM inserted) = '待收货'
BEGIN
UPDATE products
SET inventory = inventory - (SELECT quantity FROM inserted WHERE orders.product_id = inserted.product_id)
WHERE product_id = (SELECT product_id FROM inserted)
END
END
```
这个触发器将在订单表中的订单状态更改时触发。如果更改后的状态为“待收货”,则触发器会更新商品表中相应商品的库存。它会减去订单中所购买商品的数量。
请注意,这个触发器假定每个订单只包含一个商品。如果一个订单中包含多个商品,你需要相应地修改触发器来考虑每个商品的数量。
在sql server 2012中设置触发器,当A表增加记录时,自动在B表增加相同记录
在SQL Server 2012中设置一个插入触发器(Insert Trigger),可以确保每当表A(通常是A表)有新记录插入时,相应的新记录会自动地插入到表B(假设表B需要与表A保持同步)。以下是创建这种触发器的基本步骤:
1. **创建触发器**:
使用 `CREATE TRIGGER` 语句,比如这样:
```sql
CREATE TRIGGER trg_A_insert ON A
AFTER INSERT
AS
BEGIN
INSERT INTO B (列1, 列2, ...)
SELECT 列1, 列2, ... FROM inserted
END;
```
这里,`trg_A_insert` 是触发器名称,`A` 是触发事件所在的表(即A表),`AFTER INSERT` 表示触发操作发生在插入之后,`inserted` 是系统提供的临时表,包含了所有刚插入的行。
2. **指定要复制的列**:
确保在`INSERT INTO B` 和 `SELECT` 子句中指定了要从A表复制到B表的所有列,并且列名一致。
3. **验证权限**:
确保拥有足够的权限来创建触发器和在B表上执行INSERT操作。
4. **测试触发器**:
创建触发器后,你可以通过向A表插入一些测试数据来验证触发器是否工作正常。
注意:
- 如果A表的数据更新涉及到删除或修改,则可能需要额外的删除或更新触发器来同步B表。
-