一个触发器的急问题,请高手帮忙解决,高分送出,谁解决谁将得到高分!

时间:2022-06-22 05:00:29
CREATE TRIGGER change_age_tig ON [callpolicer_Temp] 
FOR INSERT
AS

update callpolicer_Temp set age=callpolicer_Temp.age+'岁' where callpolicer_Temp.age<>null --or callpolicer_Temp.age<>""
本来age 字段值是一个数字形式的如‘35’,我的目的是在插入后所有的age 字段值后加一个“岁”. 

15 个解决方案

#1


好急用的,高手请快来!

#2


把“岁”加在表中是错误的!!
应该在前端或用SQL语句显示“岁”字.

#3


CREATE TRIGGER change_age_tig ON [callpolicer_Temp] 
FOR INSERT
AS

update callpolicer_Temp set age=callpolicer_Temp.age+'岁' 
From inserted 
where callpolicer_Temp.主键字段 = inserted.主键字段
and callpolicer_Temp.age<>null --or callpolicer_Temp.age<>""

#4


update callpolicer_Temp set age=callpolicer_Temp.age+'岁' where callpolicer_Temp.age Is Not Null;

#5


没有的,插入到callpolicer_Temp表中的值是我查询过滤到的,且在callpolicer_Temp表中的没必要设这个主键字段

#6


CREATE TRIGGER tr_age111 ON agetest 
FOR INSERT
AS

update agetest set age=age+'岁' where age<>''

我试了,可以。。用单引号 

#7


插入的值根本没改变,临时表如下:CREATE TABLE [dbo].[callpolicer_Temp] (
[casecode] [varchar] (18) NOT NULL ,
[name] [varchar] (20) NULL ,
[sex] [varchar] (4) NULL ,
[age] [numeric](10, 0) NULL ,
[identityname] [varchar] (20) NULL ,
[abodecause] [varchar] (30) NULL ,
[idcard] [varchar] (20) NULL ,
[nation] [varchar] (20) NULL ,
[tel] [varchar] (40) NULL ,
[stayaddress] [varchar] (60) NULL ,
[property] [varchar] (16) NULL 
) ON [PRIMARY]

#8


Ylljony:
你的思维有问题.
你知不知道你的这个trigger几乎是对整张callpolicer_Temp表进行操作.

如果你的商务处理复杂一点,那么你不和inserted用主键关联势必会出错.

#9


casecode为案件编码,是找到所有某案件下的报案人与受害人记录插入此临时表中.更改上面的一行为[age] [varchar](10) NULL ,

#10


我的错误结果是在每一个要age字段下插入了三个"岁"。如“35岁岁岁”

#11


如果你的触发器就是这样的话.

那么, 是这样的,你的触发器每执行一次就加一个.

不信,你再执行一次就变成4个’岁’了,哈哈.

#12


加上条件:
CHARINDEX('岁', age, 1)=0



#13


所以一定要加上insert.key=callpolicer_Temp.key,保証每次加上的'歲'字都是加在最新插入的記錄上。

#14


多谢: nononono(null,null) !解决!

#15


这也用触发器?
别用滥了!

#1


好急用的,高手请快来!

#2


把“岁”加在表中是错误的!!
应该在前端或用SQL语句显示“岁”字.

#3


CREATE TRIGGER change_age_tig ON [callpolicer_Temp] 
FOR INSERT
AS

update callpolicer_Temp set age=callpolicer_Temp.age+'岁' 
From inserted 
where callpolicer_Temp.主键字段 = inserted.主键字段
and callpolicer_Temp.age<>null --or callpolicer_Temp.age<>""

#4


update callpolicer_Temp set age=callpolicer_Temp.age+'岁' where callpolicer_Temp.age Is Not Null;

#5


没有的,插入到callpolicer_Temp表中的值是我查询过滤到的,且在callpolicer_Temp表中的没必要设这个主键字段

#6


CREATE TRIGGER tr_age111 ON agetest 
FOR INSERT
AS

update agetest set age=age+'岁' where age<>''

我试了,可以。。用单引号 

#7


插入的值根本没改变,临时表如下:CREATE TABLE [dbo].[callpolicer_Temp] (
[casecode] [varchar] (18) NOT NULL ,
[name] [varchar] (20) NULL ,
[sex] [varchar] (4) NULL ,
[age] [numeric](10, 0) NULL ,
[identityname] [varchar] (20) NULL ,
[abodecause] [varchar] (30) NULL ,
[idcard] [varchar] (20) NULL ,
[nation] [varchar] (20) NULL ,
[tel] [varchar] (40) NULL ,
[stayaddress] [varchar] (60) NULL ,
[property] [varchar] (16) NULL 
) ON [PRIMARY]

#8


Ylljony:
你的思维有问题.
你知不知道你的这个trigger几乎是对整张callpolicer_Temp表进行操作.

如果你的商务处理复杂一点,那么你不和inserted用主键关联势必会出错.

#9


casecode为案件编码,是找到所有某案件下的报案人与受害人记录插入此临时表中.更改上面的一行为[age] [varchar](10) NULL ,

#10


我的错误结果是在每一个要age字段下插入了三个"岁"。如“35岁岁岁”

#11


如果你的触发器就是这样的话.

那么, 是这样的,你的触发器每执行一次就加一个.

不信,你再执行一次就变成4个’岁’了,哈哈.

#12


加上条件:
CHARINDEX('岁', age, 1)=0



#13


所以一定要加上insert.key=callpolicer_Temp.key,保証每次加上的'歲'字都是加在最新插入的記錄上。

#14


多谢: nononono(null,null) !解决!

#15


这也用触发器?
别用滥了!