sql语句,用触发器实现一个表中其中一列的值不能超过另一列的值

向表中插入数据时其中的一列的数值不能超过另外一列,用触发器应该怎么写

首先触发器的条件得是before insert
然后你取两个列的old值比较
如果超过了,你是修改其中一列还是取消插入,看你要求

参考下面,改写下咯


create trigger limitValue
before insert on tableXXX
for each row
begin
declare mesg varchar(10)
if new.xxx < new.xxx then
set mesg='插入成功';
else select A002 into mesg;
end if
end

按照你的要求,你的触发器应该用before的了,插入前,先判定两个列的大小,符合条件则不干预插入过程,插入成功,否则就看你的需求是取消插入还算改值再插入了

创建触发器语法可以参考下这个http://t.csdn.cn/SGmEx

create or replace trigger TRI_testab
  before insert  on  testtable
  for each row
declare
 
  PRAGMA AUTONOMOUS_TRANSACTION;
begin
  if :new.a>new.b
    then
      
  RAISE_APPLICATION_ERROR (- 20005, 'a字段大于b的值禁止操作' )
   end if;
end TRI_testab ;


给你写个标准的示例

create trigger checkLimit
on tb
after insert
as
begin    
  select @id=id,@limit1=limit1,l@imit2=limit2 from inserted
    if @limit1>@limit2
    print '数值不能大于limit2,事务回滚'
    rollback transaction
end

其实很简单,查询下inserted表中,是否有col1>col2的情况就行了。inserted是个表,批量插入、修改时里面有多条。
效果如下图:

img

代码如下:


/****** Object:  Table [dbo].[TestTable]    Script Date: 2022/11/25 9:19:16 ******/
CREATE TABLE [dbo].[TestTable](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [col1] [int] NOT NULL,
    [col2] [int] NOT NULL,
 CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

CREATE TRIGGER [dbo].[OnTestTableInsert]
   ON  [dbo].[TestTable]
   AFTER INSERT,UPDATE
AS 
IF (ROWCOUNT_BIG() = 0)
    RETURN;
IF EXISTS (SELECT 1  
           FROM inserted where col1>col2
          )  
BEGIN  
    RAISERROR ('col1超过col2', 16, 1);  
    ROLLBACK TRANSACTION;  
    RETURN   
END

题主最好再明确一下要求的表达。
1.是向表插入一行数据,本次插入的记录中的a<=b。
2.是a<=max(b)表中已有b的最大值。
猜测题主可能是2,
如果1的话,数据录入时程序判断即可踢出,无需查表内值。

CREATE TRIGGER [dbo].[course_insert] ON [dbo].[student]
FOR insert
AS
Begin
DECLARE @id1 int,@id2 int
SELECT @id1= xx.id1,@id2=xy.id2 FROM xx,xx
if(xx.id<xy.id)
PRINT '无法修改'
RETURN
End
GO

SQL|数据插入|触发器
https://blog.csdn.net/flystar27/article/details/119854160

参考