请高手看触发器的语句!这到底怎么回事?

setfocus 2003-11-19 05:23:00
各位先看语句!
CREATE TRIGGER [tg_update] ON [dbo].[tb_MT]
FOR UPDATE
AS
Declare
@intTem tinyint,
@str1 varchar(16),
@str2 varchar(16)
------------- --查询

if Exists(select * from inserted tem where tem.flag_del=0)
begin
select @str1=f1,@str2=f2 from inserted tem where tem.flag_del=0
select @intTem=patindex(@str1,m_f1) from m_T where m_f2=@str2(*1)

if @intTem=0 --如果没在字段中
begin
...........
end
else--在字段中
begin
..............................................
end
end
这个触发器是在更新的时候触发!但是(*1)判断后总是执行if @intTem=0 中的语句,我直接试过给(*1)赋值,语句没有问题,但是直接更新数据表的字段值时候总是不执行else语句!
请帮助!解决后另开贴给分感谢!
...全文
46 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
setfocus 2003-11-20
  • 打赏
  • 举报
回复
继续关注
setfocus 2003-11-20
  • 打赏
  • 举报
回复
sunsunup() :当都是null时候,才返回null吧!
sunsunup 2003-11-20
  • 打赏
  • 举报
回复
用charindex(), patindex(), 如果在一串字符中找不到符合要求的字符, @intTem不是0, 是null. 知道怎樣處理了吧?
setfocus 2003-11-20
  • 打赏
  • 举报
回复
是两个表!m_t表中
ID m_f2 m_f f1 Flag_Del
133 222 111 111 0
134 222 222 222ddd 0
135 222 33344 333 0
和另一个表
m_t2
ID m_f2 m_f1
11 222 111,222ddd,333
如果我要修改了333为abc
那么我希望m_f1就变成111,222ddd,abc
但是有两种情况在,第一,就是135记录如果flag_del是1的时候,那么m_f1中没有333,如果变成0那么才在m_f1中增加这个333;第二,就是135记录中把333变成了其他值那么m_f1要求响应改变!
所以,我要用charindex来判断是不是存在这个值!但是每次修改的时候都是判断为0!好象不能找到inserted前的那个状态值!
pengdali 2003-11-20
  • 打赏
  • 举报
回复
你到底有几个表呀?你写的不是两个表?
setfocus 2003-11-20
  • 打赏
  • 举报
回复
我用存储过程解决了这个问题!给分了!
setfocus 2003-11-19
  • 打赏
  • 举报
回复
就是m_f1是把f1用,号组合的一个字段值,在这个字段值中找f1更改的串值
setfocus 2003-11-19
  • 打赏
  • 举报
回复
m_f1字段中不是一条数据是一个'111,222,333'这种形式的数据组!我是想查找这个组里是不是有update时候改的数据!比如M_T表中:333被改成333A那么,这个m_f1就改成'111,222,333A'
setfocus 2003-11-19
  • 打赏
  • 举报
回复
哦!我写错了!m_f2就是f2
pengdali 2003-11-19
  • 打赏
  • 举报
回复
CREATE TRIGGER [tg_update] ON [dbo].[tb_MT]
FOR UPDATE
AS
Declare
@intTem int,
@str1 varchar(100),
@str2 varchar(100)
------------- --查询

if Exists(select 1 from inserted tem where tem.flag_del=0)
begin
select @str1=f1,@str2=f2 from inserted tem where tem.flag_del=0

if not exists(select 1 from m_T where rtrim(m_f2)=@str2 and m_f1 like '%'+@str1+'%')
begin
select '是0'
end
else--在字段中
begin
select '不是0'
end
end
pengdali 2003-11-19
  • 打赏
  • 举报
回复
你还有个f2列的数据呢?
setfocus 2003-11-19
  • 打赏
  • 举报
回复
pengdali(大力 V3.0) 我急需解决!能不能打电话给你?
setfocus 2003-11-19
  • 打赏
  • 举报
回复
ID m_f2 m_f f1 Flag_Del
133 222 111 111 0
134 222 222 222ddd 0
135 222 33344 333 0

这个例子
我改变f1的第135条数据的333为333G的时候执行的还是=0的语句,好象找不到一样!但是要是变m_f对应的33344为别的值,它执行的又是对的!

pengdali(大力 V3.0) :我改成charindex(m_f1,@str1)还是不行呀!help上说m_f1是被搜索字符串的吗!是不是charindex(@str1,m_f1)才识对的?
pengdali 2003-11-19
  • 打赏
  • 举报
回复
如果你用charindex必须:

charindex(m_f1,@str1)
setfocus 2003-11-19
  • 打赏
  • 举报
回复
我改了查询语句了
select @str1=ltrim(rtrim(f1)),@str2=ltrim(rtrim(f2)) from inserted tem where tem.flag_del=0
select @intTem=charindex(@str1,m_f1) from m_T where m_f2=@str2--(*1)
但还是不执行!
可能问题出在什么地方呢?
snowolf_ren 2003-11-19
  • 打赏
  • 举报
回复
if Exists(select * from inserted tem where tem.flag_del=0)
begin
select @str1=f1,@str2=f2 from inserted tem where tem.flag_del=0
----------------------------
@str1='%'+@str1+'%'
------------------------------
select @intTem=patindex(@str1,m_f1) from m_T where m_f2=@str2(*1)

if @intTem=0 --如果没在字段中
begin
...........
end
else--在字段中
begin
..............................................
end
end
pengdali 2003-11-19
  • 打赏
  • 举报
回复
patindex需要通配符
pengdali 2003-11-19
  • 打赏
  • 举报
回复
CREATE TRIGGER [tg_update] ON [dbo].[tb_MT]
FOR UPDATE
AS
Declare
@intTem tinyint,
@str1 varchar(16),
@str2 varchar(16)
------------- --查询

if Exists(select * from inserted tem where tem.flag_del=0)
begin
select @str1=f1,@str2=f2 from inserted tem where tem.flag_del=0

select @intTem=patindex('%'+@str1+'%',m_f1) from m_T where m_f2=@str2(*1)

if @intTem=0 --如果没在字段中
begin
...........
end
else--在字段中
begin
..............................................
end


end
sunshareforever 2003-11-19
  • 打赏
  • 举报
回复
代码返回
setfocus 2003-11-19
  • 打赏
  • 举报
回复
还是不行!
加载更多回复(1)

34,499

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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