这是一个触发器:CREATE TRIGGER Insert2_Or_Update_sal
ON Teacher1
FOR update
AS
BEGIN
declare @Sal numeric(7,2),@Job varCHAR(10),@Tno varCHAR(6),@Sal0 numeric(7,2),@Job0 varCHAR(10),@Tno0 varCHAR(6)
declare @msg char(50)
--inserted是insert或update触发表临时表,参考下面帮助。
select @Tno=Tno,@Job=Job,@Sal=Sal from Inserted
select @Tno0=Tno,@Job0=Job,@Sal0=Sal from Deleted
if abs(@Sal-@Sal0)>2000
ROLLBACK TRANSACTION
set @msg='插入后的薪资比插入前的薪资变动过大,故将为您取消此插入操作!'
print @msg
END 验证:
UPDATE Teacher1 SET Sal=1990 WHERE Tno='T002';
但是老师出现这样的错误:消息 8152,级别 16,状态 14,过程 Insert_Or_Update_sal1,第 11 行
将截断字符串或二进制数据。
语句已终止。
ON Teacher1
FOR update
AS
BEGIN
declare @Sal numeric(7,2),@Job varCHAR(10),@Tno varCHAR(6),@Sal0 numeric(7,2),@Job0 varCHAR(10),@Tno0 varCHAR(6)
declare @msg char(50)
--inserted是insert或update触发表临时表,参考下面帮助。
select @Tno=Tno,@Job=Job,@Sal=Sal from Inserted
select @Tno0=Tno,@Job0=Job,@Sal0=Sal from Deleted
if abs(@Sal-@Sal0)>2000
ROLLBACK TRANSACTION
set @msg='插入后的薪资比插入前的薪资变动过大,故将为您取消此插入操作!'
print @msg
END 验证:
UPDATE Teacher1 SET Sal=1990 WHERE Tno='T002';
但是老师出现这样的错误:消息 8152,级别 16,状态 14,过程 Insert_Or_Update_sal1,第 11 行
将截断字符串或二进制数据。
语句已终止。
这是教师表,我刚才取得是一部分CREATE TABLE Teacher1
( Tno CHAR(6) NOT NULL,
Tname CHAR(8),
Tsex CHAR(2),
Tage SMALLINT,
Job CHAR(10), /*职称*/
Deptno CHAR(20), /*所在系编号*/
Sal NUMERIC(7,2), /*工资*/
Deduct NUMERIC(7,2), /*扣除*/
CONSTRAINT PK_Teacher1 PRIMARY KEY(Tno) );
INSERT INTO Teacher1(tno,sal)
VALUES('t003',2000)
SELECT * FROM dbo.teacher1我模拟了一下,都成功,而且你的触发器有点问题,都成功了,但是还是显式那个中文
FOR UPDATE
AS
BEGIN
DECLARE @Sal NUMERIC(7, 2) ,
@Job VARCHAR(15) ,
@Tno VARCHAR(15) ,
@Sal0 NUMERIC(7, 2) ,
@Job0 VARCHAR(15) ,
@Tno0 VARCHAR(15)
DECLARE @msg CHAR(50)
SELECT @Tno = Tno ,
@Job = Job ,
@Sal = Sal
FROM Inserted
SELECT @Tno0 = Tno ,
@Job0 = Job ,
@Sal0 = Sal
FROM Deleted
IF ABS(@Sal - @Sal0) > 2000
SET @msg = '插入后的薪资比插入前的薪资变动过大,故将为您取消此插入操作!'
PRINT @msg
ROLLBACK TRANSACTION
END