设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1090|回复: 4
打印 上一主题 下一主题

SQL 储存过程通过查询时时更新数据到另一张表中

[复制链接]
1#
发表于 2022-4-3 12:13:24 | 显示全部楼层
答复如下(见红褐色字体):
1、表2 BOM 是多款物料对一个表1定单,通过查询会产生多条相同的数据
BOM表如果是树形结构,请使用递归查询,写法参考以下链接:
【SQL Server】递归查询
是否需要根据最底层进行计算,看你的实际情况。

2、查询无主键,插入新表会产生重得数据
使用row_number() over(partition by 类别1,类别2 order by 日期1,日期2) As 序号,嵌套后使用where 序号=1。
或者使用distinct去重。具体请参考:
——前者更彻底。比如,一个订单有两个批次,如果distinct包含了批次,无法去重;但如果用row_number按订单号partition,那么就能去重。
SQL Server 几种去重总结3、做到订单下单时时更新到表3
下单时自动更新,只能使用触发器(比如for insert)。具体请参考:
SQL触发器的使用及语法
sql插入触发器-插入前检测数据
触发器是写在后台,被前端调用的程序。故而需要在前端的插入数据操作按钮里加上这个操作,这样每次插入订单就会自动更新一次物料表了。
如果不需要频繁操作触发器的话,可以使用存储过程。自动调度存储过程,这里涉及了“作业”的概念,请参考以下链接的第5步:
利用SQL脚本完成数据库同步

以上问题算是回答完了。难得逮到一个SQL Server的帖子,自然得罗嗦几句了(如果不想看可以跳过,但我赌你不会)。
---------------------------------------------------------我是分割线--------------------------



1、存储过程不是这样写的啊。应该创建一个叫做“表值函数”的东西用来调用。具体请参考:
巧用表值函数更新数据
2、根据你的脚本。应该是有个upsert(update or insert)的逻辑。SQL Server上可以通过merge来处理,具体请参考:
SQL Server中Upsert的三种方式

3、是否一定要使用upsert来操作呢?个人觉得,可以考虑增加主键字段或者日期等作为判断依据的。
比如,BOM里今天新增了一个物料,那么,是不是可以添加一个日期字段呢?这样的话,前面的“#TT”(姑且这么说吧,个人觉得,应该新建表来存储)同样也把这个日期字段添加进去。两个日期对比,把最新的数据追加进去。
这样做的好处在于每次只是增量,数据量较少,运行快。前提是不能改物料表的数据。比如,今天这个物料ID叫“张三”,明天这个ID就改成“李四”,但日期没改,这就不好判断。
事实上,物料表这样的基础数据,是不应该改底层的,可以添加一个“是否在用”字段来处理那些价格发生变化的同名物料。在前端使用时只选择“是”的数据。
当然,BOM我是不熟的,算是纸上谈兵吧。这点建议,你可以参考也可以不管。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-21 07:14 , Processed in 0.068264 second(s), 23 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表