触发禁止在表格列中插入负数

在我的mssql数据库中,我需要创建一个不允许在项目表中插入负预算的触发器 . 我真的不知道怎么能这样做 . 各种帮助将不胜感激!

CREATE TRIGGER budget on PROJ FOR INSERT

对于所有答案省略触发器 - 不幸的是我需要使用触发器执行此操作

回答(4)

2 years ago

你不需要触发器 . SQL Server支持 check 约束:

alter table projects add constraint chk_projects_budget check (budget >= 0);

2 years ago

您可以尝试此操作来添加约束以检查可接受的整数值(正或负) .

CREATE TABLE [dbo].[Tbl](
        [F1] [int] NULL,
        [F2] [int] NULL
    ) ON [PRIMARY]

    GO
     --To accept only positive numbers and 0
    ALTER TABLE [dbo].[Tbl]  WITH CHECK ADD  CONSTRAINT [CK_Tbl] CHECK  (([F1]>=(0)))
    GO
    --To check constraint on the table
    ALTER TABLE [dbo].[Tbl] CHECK CONSTRAINT [CK_Tbl]
    GO
    --To accept only negative numbers and 0
    ALTER TABLE [dbo].[Tbl]  WITH CHECK ADD  CONSTRAINT [CK_Tbl_1] CHECK  (([F2]<=(0)))

有关更多信息,请查看链接Integer Constraint

2 years ago

如果您想检查多个列,也可以

ALTER TABLE YourTableName
ADD CONSTRAINT CH_CheckForNegative CHECK(Col1 >=0 AND Col2 >= 0);

2 years ago

没有理由不使用 CHECK 约束 . 但是,通过检查是否有任何新行具有负预算并在该情况下引发错误,您当然可以通过触发器实现该约束 .

CREATE TRIGGER projects_positive_budget ON projects 
FOR INSERT, UPDATE
   IF EXISTS (SELECT * FROM inserted WHERE budget < 0)
   BEGIN
      RAISERROR('No negative budget is allowed', 16, -1);
      ROLLBACK;
      RETURN
   END
GO