找了两天了,还是没找到好的解决方法,触发器,多条的update,请高手帮忙
我现在有2个表,结构一样,除了ID,其他的字段都会被修改,
所以,当修改其中一个时,其他的内容都更改
举例:表名News,字段:ID,Title,Content
ALTER TRIGGER [t_update_selfTable]
ON [dbo].[tbl_News]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
declare @Title varchar(500)
declare @Content varchar(5000)
declare @Id int
select @Id = xId, @Title = xTitle, @Content = xContent from inserted
if UPDATE(xTitle)
begin
update Smsmailboxv22.dbo.tbl_News
set
xTitle = @Title,
xContent = @Content
where xId = @Id
end
END
我写的这个,更新一条,没问题,更新2条的话,触发器执行错误,只会在另外一个表更新其中一个,很奇怪。
听说要用什么游标,现在一点都不清楚,请高手帮忙
------解决方案--------------------ALTER TRIGGER [t_update_selfTable]
ON [dbo].[tbl_News]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
if UPDATE(Title)
begin
update a
set
xTitle = i.Title,
xContent = i.Content
from Smsmailboxv22.dbo.tbl_News a,inserted i
where a.xId = i.Id
end
END
go
------解决方案--------------------ALTER TRIGGER [t_update_selfTable]
ON [dbo].[tbl_News]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
declare @Title varchar(500)
declare @Content varchar(5000)
declare @Id int
if UPDATE(xTitle)
declare dd cursor for select xId, xTitle,xContent from inserted
open dd
FETCH NEXT FROM dd INTO @id, @title, @content
WHILE @@FETCH_STATUS = 0
begin
update Smsmailboxv22.dbo.tbl_News
set
xTitle = @Title,
xContent = @Content
where xId = @Id
FETCH NEXT FROM dd INTO @id, @title, @content
end
CLOSE dd
DEALLOCATE dd
END
------解决方案--------------------2个表之间建立级联关系,这样更新时就更方便。
------解决方案--------------------ALTER TRIGGER [t_update_selfTable]
ON [dbo].[tbl_News] AFTER UPDATE AS
BEGIN
update Smsmailboxv22.dbo.tbl_News
where xId=a.xId,xTitle=a.xTitle,xContent=a.xContent from inserted
END