一个简单的触发器
ALTER trigger WriteCreateDT
on dbo.Weight
for insert
as
begin
update car set isuse=1
end
为何报错 “无法为更新行集定位:一些值可能已在最后读取后改变”
而增加 Set nocount on 语句后(如下),就不报错了呢
ALTER trigger WriteCreateDT
on dbo.Weight
for insert
as
begin
set nocount on --增加这句
update car set isuse=1
end
set nocount on 语句起和作用,网上大多说是不返回计数,可以提高性能,可这不只是性能的问题吧,报错啊
------解决方案--------------------
set nocount ON|OFF
阻止在结果集中返回可显示受 Transact-SQL 语句或存储过程影响的行计数的消息。
你说的不是报错,是警告.应用程序中如果发生某些错误,会捕捉到此类提示信息并返回给用户,实际上程序并未报错中止
------解决方案--------------------
- SQL code
CREATE trigger test on dbo.a for insert as begin update b set id=id+1 END INSERT INTO dbo.a ( id, c, d ) VALUES ( 1, -- id - int '2', -- c - char(2) '3' -- d - char(3) )
------解决方案--------------------
比较郁闷,模拟不出来你的错误来
这个错误是程序端报的还是 在查询分析器里面?
查了一些资料也有人说在上set nocount on 可以解决
解决了就好了 呵呵
------解决方案--------------------
原语句是没问题的,根据报错信息提示,无法为更新行集定位,可能是你的b表存在相同的行而且没有设置主键,
一些值可能已在最后读取后改变,可能是应用程序有读取操作而产生了行锁。加事务控制试试
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
- SQL code
ALTER trigger WriteCreateDTon dbo.Weightfor insert as begin set nocount on --增加这句 update car set isuse=1end
------解决方案--------------------
------解决方案--------------------
update car set isuse=1
为啥没条件呢
------解决方案--------------------
DELPHI的问题
或者说ADO调用设置的问题
能SET NOCOUNT ON解决就解决了吧
------解决方案--------------------
看下15楼提到的问题,这样写触发器相当的危险,一般应该连接INSERTED表