关于 Set nocount on 的有关问题

关于 Set nocount on 的问题一个简单的触发器ALTERtrigger WriteCreateDTon dbo.Weightfor insertasbeginu

关于 Set nocount on 的问题
一个简单的触发器
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表存在相同的行而且没有设置主键,
一些值可能已在最后读取后改变,可能是应用程序有读取操作而产生了行锁。加事务控制试试
[解决办法]
探讨
引用:
set nocount ON|OFF
阻止在结果集中返回可显示受 Transact-SQL 语句或存储过程影响的行计数的消息。
你说的不是报错,是警告.应用程序中如果发生某些错误,会捕捉到此类提示信息并返回给用户,实际上程序并未报错中止

感谢你的关注

事实上是应用程序报错了。

[解决办法]
探讨
表是有主键的,而且插入的也是主键值不同的数据。

经过测试发现
在程序端使用insert语句插入就不报错
在程序端使用如下方法时就报错。
adoquery.open;
adoquery.append;
adoquery.fieldbyname('主键字段').asstring:='值';
adoquery.post;

[解决办法]
SQL code
ALTER trigger WriteCreateDTon dbo.Weightfor insert  as  begin  set nocount on --增加这句  update car set isuse=1end
[解决办法]
探讨
引用:
引用:
调试过了,代码执行adoquery1.post时报错,但不知为何要报这个错。

[解决办法]
update car set isuse=1
为啥没条件呢
[解决办法]
DELPHI的问题
或者说ADO调用设置的问题

能SET NOCOUNT ON解决就解决了吧
[解决办法]
看下15楼提到的问题,这样写触发器相当的危险,一般应该连接INSERTED表