SQL高手语句

笑看人生2 2013-08-19 10:29:07
比如采购入库的,入库的表是A,字段B是数量,库存表是C,库存字段是D,最高库存字段是E,要怎么判断,库存不能超过最高库存,高手写下语句
...全文
247 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andy__Huang 2013-08-20
  • 打赏
  • 举报
回复
你入库操作,至少要更新两个表(入库表,库存表),最好要用存储过程. 它的好处:要么全部成功,要么全部失败回滚 所以用存储过程.哪些有疑问的继续帖出来
笑看人生2 2013-08-20
  • 打赏
  • 举报
回复
你电话多少,你是高手,你写的语句,是做存储过程吗
Andy__Huang 2013-08-20
  • 打赏
  • 举报
回复
1282188916
笑看人生2 2013-08-20
  • 打赏
  • 举报
回复
你QQ号多少啊,找你有事啊
Andy__Huang 2013-08-20
  • 打赏
  • 举报
回复
你把表结构帖出来,并且帖出一些实际数据,用来测试 建你花一点时间来学习T_SQL语法,这些都是很基础的,稍想一下,动手一下就知道了
笑看人生2 2013-08-20
  • 打赏
  • 举报
回复
insert into A(字段1,字段2....) values(@值1,@值2...) 如果是从一个表到另一个表,多条记录一并插入的,可以使用这种访求 insert into A(字段1,字段2....) select col1,col2... from tb where (条件表达式) group by (分组字段) --如果有分组 要怎么写
Andy__Huang 2013-08-20
  • 打赏
  • 举报
回复
引用 9 楼 u011741284 的回复:
insert into A(字段1,字段2....) values(值1,值2...) 不能确定什么值啊
不能确定值就用变量呀 insert into A(字段1,字段2....) values(@值1,@值2...) 如果是从一个表到另一个表,多条记录一并插入的,可以使用这种访求 insert into A(字段1,字段2....) select col1,col2... from tb where (条件表达式) group by (分组字段) --如果有分组
KeepSayingNo 2013-08-20
  • 打赏
  • 举报
回复
1、先判断B加D是否大于E,如果大于E则证明超过最大库存不予入库,否则进入步骤2 2、更新C表的D字段为D+B 3、A表增加一条入库记录 这个最好用存储过程实现,保证数据的一致性。
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName> 
	@B int
AS
BEGIN
	-- 获取入库量对应的库存量为@D,判断入库量加库存量,如果小于等于最大库存量,进行下面
	
	update C SET D=@D+@B
	insert into A (B) value(@B)
END
GO
moqing 2013-08-20
  • 打赏
  • 举报
回复
可以在A表写触发器来处理
笑看人生2 2013-08-20
  • 打赏
  • 举报
回复
insert into A(字段1,字段2....) values(值1,值2...) 不能确定什么值啊
Andy__Huang 2013-08-20
  • 打赏
  • 举报
回复
引用 7 楼 u011741284 的回复:
insert into A(....) values(.....) insert into C(....) values(.....) 就是这样用吗 (....) 不用放什么值吧
我是省略字段名,字段值的,不能那么写 insert into A(字段1,字段2....) values(值1,值2...)
笑看人生2 2013-08-20
  • 打赏
  • 举报
回复
insert into A(....) values(.....) insert into C(....) values(.....) 就是这样用吗 (....) 不用放什么值吧
笑看人生2 2013-08-20
  • 打赏
  • 举报
回复
我30了,一直做ERP,不知道做什么好啊,哎 想去学开发,时间来不及了
Andy__Huang 2013-08-19
  • 打赏
  • 举报
回复
外部进来准备入库的数据先存放到临时表#temp,然后先子查询统计同一编号数量总和,再与库存表关联
declare @ismore int
select @ismore =case when C.D+isnull(A.B,0) >C.E then 1 else 0 end
from C 
left join (select itemNo,sum(B) as B from #temp group by itemNo)A on A.itemNo=C.itemNo
where C.itemNo='001'
if  @ismore=1  -->没有超过最高库存,则插入A表和C表
begin
     insert into A(....) values(.....)
     insert into C(....) values(.....)

end
笑看人生2 2013-08-19
  • 打赏
  • 举报
回复
我看了,只要往A里面插入单据,就判段,如果超过,控制单据不能保存,而且同一个单号,会有两笔及两笔以上的记录,该怎么控制啊
Andy__Huang 2013-08-19
  • 打赏
  • 举报
回复
给的信息有点少,假如物料编码字段ItemNo,物料编号为001

select case when C.D+isnull(A.B,0) >C.E then '已超过最高库存' else '未超过' end
from C 
left join A on A.itemNo=C.itemNo
where C.itemNo='001'

27,581

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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