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'
语句执行不成功
触发器是不是没有真正执行 展开
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'
语句执行不成功
触发器是不是没有真正执行 展开
1个回答
展开全部
你这个是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
追问
谢谢
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询