Declare @zyxh char(12),@kdks char(8)
DECLARE @DepotName char(10)
BEGIN TRAN
if not exists(select 摆药单号 from摆药单 where 状态='00' and 摆药单号=@PutMedNo)
begin
return 0
end
EXECUTE Sp_GetBillNo @QuitMedNo output,'D'
INSERT INTO [退药]([退药序号], [操作员], [退药时间], [退药说明])
VALUES(@QuitMedNo,@Operator,cast(getdate() as smalldatetime),@Intro)
if (@@error<>0 or @@rowcount=0)
begin
rollback transaction
raiserror('插入退药表失败',16,-1)
return 1
end
DECLARE PutMed_Cursor CURSOR FOR
SELECT DISTINCT A.处方号,A.处方序号,B.住院序号,B.科室,C.名称 as 摆药区 FROM 摆药单明细 A inner join 处方 B ON A.处方号 =B.处方号 AND A.处方序号=B.处方序号
INNER JOIN 摆药区 C ON B.摆药区=C.代码 WHERE A.摆药单号=@PutMedNo
OPEN PutMed_Cursor
FETCH NEXT FROM PutMed_Cursor INTO @PreRecipeNo, @PreRecipeXNo,@zyxh,@kdks,@DepotName
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC usp_QuitBillDetail @QuitMedNo ,@PutMedNo,@PreRecipeNo,@PreRecipeXNo,@zyxh,@kdks,@fsks,@DepotName
--另一个存储过程
if (@@error<>0)
begin
rollback transaction
CLOSE PutMed_Cursor
--DEALLOCATE PutMed_Cursor
raiserror('更新退单处方明细失败',16,-1)
return 1
end
FETCH NEXT FROM PutMed_Cursor INTO @PreRecipeNo, @PreRecipeXNo,@zyxh,@kdks
END
Top
个人认为,偶写了这么久的SQL,只说语法很无聊,语句的涵义与灵活的组合很重要,下面这个是写的一个药品管理的存储过程的一句,很经典:
UPDATE 药房库存 SET 库存数量=库存数量-B.用量 FROM [药房库存] A ,
( Select sum(用量) as 用量,药品价码 FROM 处方项
WHERE 处方号=@RecipeNo AND 处方序号=@RecipeXNo
GROUP BY 药品价码
) BWHERE A.药品价码=B.药品价码 AND A.库房名称=@DepotName
这是一个参照B表将A表中库存一一修改,而B表中存在一个求和,A表也与B表关联,同时要满足A表条件。
Top
是的..SQL中应用的经典应该只考虑SQL查询的应用..
存储过程已经使用控制语法操作了,和别的程序设计语言设计算法没什么区别..
Top
gz
Top
very good 我一定收藏!!!
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-30385-35.html
然后苏联海军菜打出我舰奉命撞击你舰的警告之后才撞击的
毕竟有几百万人去取外国新娘了
其实今年以来国家实际上放了30000亿的水