找回密码
 立即注册

QQ登录

只需一步,快速开始

ECHO1998

高级会员

86

主题

251

帖子

1079

积分

高级会员

积分
1079
ECHO1998
高级会员   /  发表于:2021-4-8 22:25  /   查看:5503  /  回复:15
1金币
本帖最后由 ECHO1998 于 2021-4-8 22:51 编辑

我用的sqlserver数据库,有一对主子表,主子表都有触发器,触发器都经过INSERT语句验证,
USE [测试]
GO
declare @str int;
INSERT INTO [dbo].[主表] ([整数1]) VALUES(9)
set   @str =  SCOPE_IDENTITY()
print  @str
INSERT INTO [dbo].[子表]([主表ID],[整数2])VALUES( @str,8)
GO
没有错误,但是一运行活字格页面,当添加的时候就报有两个以上记录的错误。


附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

16 个回复

正序浏览
Timothy.Xu讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2021-4-19 09:04:49
16#
感谢支持~
回复 使用道具 举报
小侠米
论坛元老   /  发表于:2021-4-17 08:11:51
15#
这么说能明白,但是有问题这个是摆在这里的
为了实现自己的逻辑把别人的逻辑给**了,这样不好滴
这个问题交个大家去自己判断吧,我就此打住哈
回复 使用道具 举报
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2021-4-16 17:09:46
14#
小侠米 发表于 2021-4-16 14:51
触发器自动修改一些内容应该是很正常的数据库操作,跟场景都没有什么关系吧
上面方法是:只在子表上用一 ...

这个如果是直接使用数据表手动添加先添加主表数据,再自己添加子表数据是没问题,
但楼主使用的是主子表逻辑的添加,这个逻辑中添加了主表之后,我们需要回调新添加的数据拿到这个主表的ID,再把这个ID放在这子表中,这个逻辑是封装好的一套。
如果在主表使用了触发器,会干扰回调的时候拿刚才添加的主表信息,因为触发器会对一些数据作修改,导致了这个问题。
不知道这样说,您能不能明白
回复 使用道具 举报
小侠米
论坛元老   /  发表于:2021-4-16 14:51:28
13#
Joe.xu 发表于 2021-4-15 16:30
您好,这个我们本地也复现了,具体的原因可能要咨询一下开发那边,
这两天就会给您反馈,您再耐心等下{: ...

触发器自动修改一些内容应该是很正常的数据库操作,跟场景都没有什么关系吧
  1. SET ANSI_NULLS ON
  2. GO
  3. SET QUOTED_IDENTIFIER ON
  4. GO
  5. CREATE TRIGGER [dbo].[zb]
  6. ON [dbo].[子表]
  7. AFTER INSERT
  8. AS
  9. BEGIN
  10. SET NOCOUNT Off;

  11. UPDATE a SET a.[整数2] = a.整数2 *10
  12. FROM 子表 a,[Inserted] b
  13. WHERE a.[ID]=b.[ID]
  14. UPDATE a SET a.[整数1] = a.整数1 *10
  15. FROM 主表 a,[Inserted] b
  16. WHERE a.[ID]=b.[主表ID]
  17. SET NOCOUNT ON;
  18. END
复制代码
上面方法是:只在子表上用一个触发器同时更新主表和子表,这个是临时可以的满足群主的需求

但是,反过来,在主表上用一个触发器同时更新主表和子表,这个是会报错的;包括帖子这里的主表、子表各自有触发器都报错
以上只是简单的测试
所以感觉这个应该是一个BUG,而且算比较严重,毕竟是跟MS数据库的逻辑直接冲突,这个问题大家一看也知道是不合理的,希望能完善一下。


点评

我感觉这个说的有道理  发表于 2021-4-16 19:04
回复 使用道具 举报
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2021-4-15 16:30:11
11#
本帖最后由 Joe.xu 于 2021-4-15 16:38 编辑
ECHO1998 发表于 2021-4-15 11:34
这个问题有解决的方法吗?

您好,这个我们本地也复现了,具体的原因可能要咨询一下开发那边,
这两天就会给您反馈,您再耐心等下

有一点想再问下,您为什么要写这两个触发进一步修改数据呢,需求场景是什么呢
回复 使用道具 举报
ECHO1998
高级会员   /  发表于:2021-4-15 11:34:14
10#
这个问题有解决的方法吗?
回复 使用道具 举报
Joe.xu讲师达人认证 悬赏达人认证 活字格认证
超级版主   /  发表于:2021-4-9 18:26:49
9#
ECHO1998 发表于 2021-4-9 17:18
我上传的工程文件已经有数据库,并含有数据,只要把内联库转为SQLSERVER外联库,页面上有触发器原代码,拷 ...

好的,这边我们先在本地调查一下,后面给您反馈
回复 使用道具 举报
ECHO1998
高级会员   /  发表于:2021-4-9 17:18:08
8#
我上传的工程文件已经有数据库,并含有数据,只要把内联库转为SQLSERVER外联库,页面上有触发器原代码,拷贝原代码到新查询,执行就可以,操作就是点击添加就会出现错误,如果你没有SQLSERVER服务器,我再想办法,我这服务器无法连接外网,物料隔离了
回复 使用道具 举报
Tracy.Liu讲师达人认证 悬赏达人认证 活字格认证
论坛元老   /  发表于:2021-4-9 15:35:49
7#
ECHO1998 发表于 2021-4-9 10:15
我的问题是设置了主表触发器引起的,可是这个触发器在用sql语句添加时又没有错误
在活字格里面分开保存主 ...

听起来像是触发器导致什么冲突了。
您可以备份一下您整个库,里面会带有触发器这些。如果有敏感数据,可以脱敏操作,随工程文件一并上传,并提供一下如何点击可以复现您的问题,这边帮您看一下哦。
回复 使用道具 举报
ECHO1998
高级会员   /  发表于:2021-4-9 10:15:25
6#
我的问题是设置了主表触发器引起的,可是这个触发器在用sql语句添加时又没有错误
在活字格里面分开保存主表和子表也没有问题。都能保存并且触发器也正常运行,一旦在活字格添加页面设置了主子表关系,应该是保存主表,子表自动保存,这个时候就引起错误
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部