首页 新闻 会员 周边

sql server 触发器问题

0
悬赏园豆:30 [已关闭问题] 关闭于 2013-08-23 10:48

表A上有个字段X,类型为text;调用存储过程Proc_A_Update_X去更新这个字段,这个存储过程定义如下:

ALTER PROC [dbo].[Proc_A_Update_X] @ID char(32) , @textBlock text as 
update A set textBlock = null  
    where ID=@ID 
DECLARE @ptrval varbinary(16) 
SELECT @ptrval = TEXTPTR(textBlock)  
FROM A
WHERE ID=@fID

WRITETEXT A.textBlock  @ptrval with log @textBlock 

在表A上建立一个触发器,当检测到字段X发生了变化,则在表B中插入X的内容。触发器定义如下:

ALTER Trigger [dbo].[Tri_A_InsteadUPdate] on [dbo].[A] instead of update
as
declare @ID char(31)         
declare @TxtBlock nvarchar(max)
begin
if update(X)
begin
    select @TxtBlock = inserted.X,@ID= inserted.ID from inserted
    if (select count(*) from B where ID= @ID) = 0
    begin
        insert into B(ID, x) values(@ID,@TxtBlock)
    end
    else
    begin
        UPdate B set X=@TxtBlock where ID=@ID
    end
end
end

现在问题是,触发器得到的txtBlock是更新前的数据,而不是存储过程更新后的数据(这让我很郁闷,明明是从inserted里读的嘛)。可能是因为在存储过程Proc_A_Update_X先是将X置为null了。但是这不是预期的结果。

请各位大神帮忙看看怎么才能在更新表A时,将数据同步到表B。

jone_e的主页 jone_e | 小虾三级 | 园豆:1410
提问于:2013-08-20 15:58
< >
分享
所有回答(2)
0

你是instead update。应该是after update吧。

清海扬波 | 园豆:825 (小虾三级) | 2013-08-20 17:45

after触发器不支持text,image,ntext数据类型,Instead触发器支持。

支持(0) 反对(0) jone_e | 园豆:1410 (小虾三级) | 2013-08-20 18:46
0

这个问题我已经解决。

jone_e | 园豆:1410 (小虾三级) | 2013-08-23 10:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册