如果数据表使用级联更新的触发器,且记录影响到多行时,在前台修记录录有时会报“无法为更新定位行,一些值可能已在最后一次读取后已更改。”的错误,如果是在触发器后才产生的此错误,则在触发器里加上SET NOCOUNT ON即可。原因估计是,更新多行结果返回更新多行信息不是一行,而ado引擎便判断错误。所以干脆不允许出现任何返回。建议写触发器时都加上这句,少好多麻烦。
例如:
例如:
CREATE TRIGGER TR_Depart_UpdateCode ON [dbo].[Depart]
FOR UPDATE
AS
begin
if Update(cCode)
begin
SET NOCOUNT ON --加上这句,前台才不会报错,意思为不返回更新记录数
declare @OldCode varchar(20),@NewCode varchar(20)
Select @OldCode = cCode from Deleted
Select @NewCode = cCode from Inserted
--人员所属部门
Update Person Set cDepCode = @NewCode where cDepCode = @OldCode
SET NOCOUNT OFF --恢复默认值
end
end