关于DELPHI里调用存储过程的一个问题

panxiaosen 2006-02-23 08:45:16
存储过程如下
CREATE PROCEDURE test
AS
INSERT INTO A VALUES ('S31032000066','1','1',1,1,'111')
INSERT INTO B VALUES ('S31032000066','1','1',1,1,'111')
GO


假设B表里已经有一条记录'S31032000066'('S31032000066'是主键),而A表是空的

我在查询分析器里执行 EXEC TEST,因为主键重复所以会报错...这是正常的

但是在DELPHI里执行这个存储并不报错,,不知道为什么???

就是说如果第一句SQL插入成功就不报错了(INSERT INTO A VALUES ('S31032000066','1','1',1,1,'111')),但是第二句明显是插入重复的主键啊?? 而且查询分析器的结果也显示报错的



...全文
108 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lisiyong 2006-02-24
  • 打赏
  • 举报
回复
Transact-SQL includes the SET NOCOUNT statement. When the NOCOUNT option is set on, SQL Server does not return the counts of the rows affected by a statement
rouqu 2006-02-24
  • 打赏
  • 举报
回复
CREATE PROCEDURE TEST
AS
SET XACT_ABORT ON
BEGIN TRAN
INSERT INTO A VALUES ('S31032000066','1','1',1,1,'111')
INSERT INTO B VALUES ('S31032000066','1','1',1,1,'111')
COMMIT TRAN
IF (@ERROR <> 0)
ROLLBACK TRAN
GO
hisi 2006-02-23
  • 打赏
  • 举报
回复
lisiyong(小样)
你的理解是错误的, set nocount跟@@rowcount是没有关系的.

@@rowcount是一个全局变量,返回当前进程最后一条查询影响的行数,即使在nocount on时也照样返回.

set nocount on
select 1
select @@rowcount

输出
----
1
1
hisi 2006-02-23
  • 打赏
  • 举报
回复
因为在delphi中执行一段T-SQL查询时,如果已经有结果集或消息输出,其后的异常将不会被捕获.

所以要指定set nocount on , 这样影响的行就不会作为消息输出.
panxiaosen 2006-02-23
  • 打赏
  • 举报
回复
为什么返回计数,DELPHI就捕获不到错误了?? 不解ing..
lisiyong 2006-02-23
  • 打赏
  • 举报
回复
我总结了一下:


当 SET NOCOUNT 为 ON 时,不返回计数(表示受Transact-SQL 语句影响的行数)。
当 SET NOCOUNT 为 OFF 时,返回计数。
即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。
默认设置为 OFF。

lisiyong 2006-02-23
  • 打赏
  • 举报
回复
to :hisi(海山)(随机种子)


不知道hisi(海山)(随机种子) 这样修改的理由是不是这样的:

当 SET NOCOUNT 为 ON 时,更新了系统函数 @@ROWCOUNT ,
从而主键重复会报错。
默认设置为 OFF。

panxiaosen 2006-02-23
  • 打赏
  • 举报
回复
谢谢兄台,加了set nocount on就可以了,可否详细讲一下为什么会这样呢? 我看了MS SQL帮助中关于set nocount on的说明还是有点摸不着头脑
hisi 2006-02-23
  • 打赏
  • 举报
回复
报错是肯定的,是你的delphi没有获取到错误吧.

如果你确认你的delphi程序没有问题,请修改存储过程如下:
CREATE PROCEDURE test
AS
set nocount on
INSERT INTO A VALUES ('S31032000066','1','1',1,1,'111')
INSERT INTO B VALUES ('S31032000066','1','1',1,1,'111')
GO

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧