sql 执行触发器 执行语句不成功

要求sr字段为长度为0是可以修改sr长度可修改为0--建一张表createtablessss(idintidentity(1,1)primarykey,namenvarc... 要求
sr字段为长度为0 是可以修改
sr长度可修改为0
--建一张表
create table ssss( id int identity(1,1) primary key, name nvarchar(10), age int, sr nvarchar(10) )
--
insert into ssss(name,age,sr) values('令狐冲3',20,'')
--触发器
if object_id('cf_lz') is not null drop trigger cf_lzgocreate trigger cf_lzon ssssfor insert,updateas declare @sname nvarchar(10),@ssr nvarchar(10),@ssr2 nvarchar(10) select @sname=name,@ssr=sr from inserted select @ssr2=sr from ssss where name=@sname
if( len(@ssr2)>0 and len(@ssr)>0) begin rollback tran -- rollback tran end else begin commit tran end

update ssss set sr='45689' where name='令狐冲3'
语句执行不成功
触发器是不是没有真正执行
展开
 我来答
shutao917
推荐于2016-05-03 · TA获得超过1213个赞
知道大有可为答主
回答量:2199
采纳率:0%
帮助的人:3144万
展开全部

你这个是FOR触发器,在语句后面执行,inserted和ssss表中的数据已经是一样的了,你下面两句得到的结果都是修改后的值:


select @sname=name,@ssr=sr from inserted   

select @ssr2=sr from ssss where name=@sname


改成:

create trigger cf_lz on ssss
for insert,update
as  
declare @sname nvarchar(10),@ssr nvarchar(10),@ssr2 nvarchar(10)  
select @sname=name,@ssr=sr from deleted   
select @ssr2=sr from ssss where name=@sname
print len(@ssr)
print @ssr
if(len(@ssr2)>0 and len(@ssr)>0)  
begin   
print 1
rollback tran -- rollback tran
end
追问
谢谢
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式