首页 文章

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

提问于
浏览
0

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

CREATE TRIGGER budget on PROJ FOR INSERT

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

4 回答

  • 0

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

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

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

    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

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

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

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

相关问题