触发器问题--向表中插入几百条纪录时正常,但插入上千上万条纪录时,不能全部插入,只能插入部分。

时间:2022-01-19 23:34:44
我在存储过程中写了一个游标,把满足条件的纪录插入一个表A中,表A有一个for insert触发器,当有纪录写入时,会自动将这些记录也写入到另外的表里面去。现在的问题是,向A中插入比较少的纪录时,比如几百条,都可以插进去;但当插入几千条时,通常只能插入一部分,可能是哪里出错了,导致程序中断退出,但又没有报错。不知各位碰到过这样的情况没有,或者有什么好的建议。谢谢。

7 个解决方案

#1


把你的SQL贴出来,否则很难判定错在那里的?

#2


是不是INSERTED表中所能容纳记录的数目有限制呀

#3


不可能 的

#4


估计是触发器自身写得有问题吧?

#5


---跟踪一下插入不正常时,sql的处理语句

开始--程序--MS SQLSERVER
--事件探察器(SQL Profiler)
--文件
--新建--跟踪...
--设置要跟踪的服务器的信息(连接服务器)--确定
--设置跟踪的项目...
--然后数据库的调用情况就会显示出来

在跟踪项目设置中,如果不熟悉的话,一般用默认设置
筛选项目有几个可以注意一下:

1.DatabaseName 同于你要监测的数据库名(不过这个好像不起作用,我的电脑上设置无效)
2.DatabaseID   同于你要检测的数据库的dbid,可以用 select db_id(N'你要监测的库名')得到dbid
3.ObjectName   同于你要监测的对象名,例如表名,视图名等
4.ObjectID     同于你要监测的对象的id,可以用 select object_id(N'你要监测的对象名')得到id
5.Error        同于错误,如果经常出现某个编号的错误,则针对此错误号
6.Seccess      同于0,失败,1,成功,如果是排错,就过滤掉成功的处理

#6


如果在高性能的服务器上作测试呢?性能再差一点的呢?
根据结果作结论。

#7


不好意思,这个问题到现在才反馈。因为某些原因很久没有上csdn。后来找到了原因,是我的批量数据中有一条记录有问题(长度超出限制),导致出错,从而整个事物回滚。谢谢大家的热情回复,特别是皱建,我后来就是按照同样的方法找到错误的。

#1


把你的SQL贴出来,否则很难判定错在那里的?

#2


是不是INSERTED表中所能容纳记录的数目有限制呀

#3


不可能 的

#4


估计是触发器自身写得有问题吧?

#5


---跟踪一下插入不正常时,sql的处理语句

开始--程序--MS SQLSERVER
--事件探察器(SQL Profiler)
--文件
--新建--跟踪...
--设置要跟踪的服务器的信息(连接服务器)--确定
--设置跟踪的项目...
--然后数据库的调用情况就会显示出来

在跟踪项目设置中,如果不熟悉的话,一般用默认设置
筛选项目有几个可以注意一下:

1.DatabaseName 同于你要监测的数据库名(不过这个好像不起作用,我的电脑上设置无效)
2.DatabaseID   同于你要检测的数据库的dbid,可以用 select db_id(N'你要监测的库名')得到dbid
3.ObjectName   同于你要监测的对象名,例如表名,视图名等
4.ObjectID     同于你要监测的对象的id,可以用 select object_id(N'你要监测的对象名')得到id
5.Error        同于错误,如果经常出现某个编号的错误,则针对此错误号
6.Seccess      同于0,失败,1,成功,如果是排错,就过滤掉成功的处理

#6


如果在高性能的服务器上作测试呢?性能再差一点的呢?
根据结果作结论。

#7


不好意思,这个问题到现在才反馈。因为某些原因很久没有上csdn。后来找到了原因,是我的批量数据中有一条记录有问题(长度超出限制),导致出错,从而整个事物回滚。谢谢大家的热情回复,特别是皱建,我后来就是按照同样的方法找到错误的。