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

时间:2018-12-10 12:10:19

标签: sql sql-server

在我的mssql数据库中,我需要创建一个触发器,该触发器将不允许在项目表中插入负预算。我真的不知道该怎么办。所有帮助将不胜感激!

CREATE TRIGGER budget on PROJ FOR INSERT

对于所有省略触发器的答案-不幸的是,我需要使用触发器

4 个答案:

答案 0 :(得分:5)

您不需要触发器。 SQL Server支持docker-compose up约束:

check

答案 1 :(得分:2)

没有理由不使用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

答案 2 :(得分:1)

如果您要检查多列,也可以

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

答案 3 :(得分:0)

您可以尝试添加约束来检查可接受的正整数或负整数。

    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