验证出错

我的天空等待 2012-11-21 12:00:46
这是一个触发器: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 行
将截断字符串或二进制数据。
语句已终止。

...全文
162 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
我的天空等待 2012-11-21
  • 打赏
  • 举报
回复
恩恩 我在看看,谢谢啦!不早啦睡啦,再见
發糞塗牆 2012-11-21
  • 打赏
  • 举报
回复
UPDATE Teacher1 SET Sal=1990 WHERE Tno='T003'; INSERT INTO Teacher1(tno,sal) VALUES('t003',2000) SELECT * FROM dbo.teacher1 我模拟了一下,都成功,而且你的触发器有点问题,都成功了,但是还是显式那个中文
我的天空等待 2012-11-21
  • 打赏
  • 举报
回复
刚才试过啦,不行!我有几个触发器都是同样的错误,我都搞不懂郁闷
發糞塗牆 2012-11-21
  • 打赏
  • 举报
回复
引用 6 楼 hxx1127 的回复:
这是教师表,我刚才取得是一部分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), ……
那你不要传varchar,穿1990.0试试
我的天空等待 2012-11-21
  • 打赏
  • 举报
回复
那个工资类型是没错的
我的天空等待 2012-11-21
  • 打赏
  • 举报
回复
这是教师表,我刚才取得是一部分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) );
發糞塗牆 2012-11-21
  • 打赏
  • 举报
回复
你定义的时候是这样, declare @Sal numeric(7,2),但是用的时候是字符型,好像不行哦
發糞塗牆 2012-11-21
  • 打赏
  • 举报
回复
这个表的结果贴出来看看Teacher1
我的天空等待 2012-11-21
  • 打赏
  • 举报
回复
不是varchar类型的吗,还会短吗? 我将数据类型加长后还是出现相同的错误,这是什么原因啊
發糞塗牆 2012-11-21
  • 打赏
  • 举报
回复
最好这样传:UPDATE Teacher1 SET Sal=1990.0 WHERE Tno='T002';
發糞塗牆 2012-11-21
  • 打赏
  • 举报
回复
Sal这个的数据类型太短了
我的天空等待 2012-11-21
  • 打赏
  • 举报
回复
恩恩,好啦,谢谢哦
發糞塗牆 2012-11-21
  • 打赏
  • 举报
回复
试试,并发表上所有其他触发器禁掉
CREATE TRIGGER Insert2_Or_Update_sal ON 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 

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧