SQL Server 如何创建确保列值范围并适用于插入和更新的触发器?

ibps3vxo  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(175)

我已经创建了一个触发器,但它不能像我想要的那样工作。例如,我想确保order_limits字段应该在1-10之间,并且它应该与插入和更新一起应用。但是我不知道如何使它与更新和插入一起工作。有人能帮助我吗?谢谢

CREATE TRIGGER trRestrictRange
ON DATABASE
FOR ALTER_TABLE
AS
BEGIN 
 ALTER TABLE Order
ADD CONSTRAINT const_range CHECK (order_limits >=1 AND order_limits <= 10 );
END
polhcujo

polhcujo1#

如果您“必须”使用触发器(没有“必须”使用触发器的充分理由),则需要使用DML触发器,而不是DDL触发器,并检查inserted伪表中的数据。然后,如果表中存在数据,THROW将显示错误:

CREATE TRIGGER Chktrg_OrderRange ON dbo.YourTable
AFTER INSERT AS
BEGIN
    IF EXISTS (SELECT 1
               FROM inserted i
               WHERE order_limits < 1 
                  OR order_limits > 10)
        THROW 98765, N'The Trigger check Chktrg_OrderRange on the table ''dbo.YourTable'' failed. The column ''order_limits'' must be more than or equal to one and less than or equal to 10.', 16;
END;

当然,正如我所说的,这样做并没有什么好的理由,相反,您应该使用CHECKCONSTRAINT

ALTER TABLE dbo.YourTable ADD CONSTRAINT chk_OrderRange
CHECK (order_limits >= 1 AND order_limits <= 10);

相关问题