經典儲存過程例子

2021-09-30 05:48:50 字數 2804 閱讀 7969

1.5.8 建立外部關鍵字

以下指令碼**為需要特別注意的外部關鍵字,其他外部關鍵字參考指令碼檔案。

-- 外部關鍵字關聯字段

alter table [dbo].[進貨單] add

constraint [進貨單_供貨商_fk] foreign key

([供貨商號]

) references [dbo].[供貨商清單] (

[供貨商號])go

alter table [dbo].[進貨單明細] add

constraint [fk_進貨單明細_進貨單] foreign key

([進貨單號]

) references [dbo].[進貨單] (

[編號]

),constraint [進貨單明細_貨號_fk] foreign key

([貨號]

) references [dbo].[商品清單] (

[貨號])go

alter table [dbo].[銷售單] add

constraint [銷售單_客戶編號_fk] foreign key

([客戶編號]

) references [dbo].[客戶清單] (

[客戶編號])go

alter table [dbo].[銷售單明細] add

constraint [fk_銷售單明細_銷售單] foreign key

([銷售單號]

) references [dbo].[銷售單] (

[編號]

),constraint [銷售單明細_貨號_fk] foreign key

([貨號]

) references [dbo].[商品清單] (

[貨號])go

1.5.9 建立儲存過程

系統使用了兩個儲存過程,分別實現進貨時加大庫存、產生應付款和銷售時減少庫存、產生應收款的功能。

-- 儲存過程

create procedure sf_進貨單 @記帳人 char(10) = null

asbegin transaction

-- 庫存庫中沒有,增加記錄

insert into 庫存庫(貨號,倉庫,庫存數量,庫存金額,庫存單價)

select distinct j.貨號, j.倉庫, 0,0,0

from 進貨單明細 as j left join 庫存庫 as k on ( j.倉庫=k.倉庫 and j.貨號=k.貨號 )

where k.貨號 is null

-- 修改庫存資訊

update 庫存庫 set 庫存單價=case when 庫存數量<=0 or (庫存數量+數量all)<=0 then 進價

else (庫存金額+稅價合計all)/(庫存數量+數量all) end ,

庫存數量=庫存數量+數量all,

庫存金額=case when 庫存數量<=0 or (庫存數量+數量all)<=0

then 進價*(庫存數量+數量all) else (庫存金額+稅價合計all) end ,

最新進價=進價

from

(select 倉庫,貨號,'數量all'=sum(進貨數量), '進價' = sum(稅價合計)/sum(進貨數量),

'稅價合計all'=sum(稅價合計) from 進貨單明細 group by 倉庫,貨號) as lsj

where 庫存庫.倉庫=lsj.倉庫 and 庫存庫.貨號=lsj.貨號

-- 加入應付款

insert into 應付款(編號, 進貨單號, 貨號, 供貨商號, 數量, 進貨單價, 金額, 進貨日期, 狀態)

select '付'+a.編號,b.編號,a.貨號,b.供貨商號,進貨數量,進價,a.稅價合計,進貨日期,'應付'

from 進貨單明細 as a, 進貨單 as b

where a.進貨單號=b.編號

-- 加入歷史

insert into 進貨單歷史 select * from 進貨單

insert into 進貨單明細歷史 select * from 進貨單明細

-- 清除進貨單

delete from 進貨單明細

delete from 進貨單

commit

gocreate procedure sf_銷售單 @記帳人 char(10) = null

asbegin transaction

-- 修改庫存資訊

update 庫存庫 set 庫存數量=庫存數量-數量all, 庫存金額=庫存單價*(庫存數量-數量all)

from (select 倉庫,貨號,'數量all'=sum(銷售數量) from 銷售單明細

group by 倉庫,貨號) as lsj

where 庫存庫.倉庫=lsj.倉庫 and 庫存庫.貨號=lsj.貨號

-- 加入應收款

insert into 應收款(編號, 銷售單號, 貨號, 客戶編號, 數量, 銷售價, 金額, 銷售日期, 狀態)

select '收'+a.編號,b.編號,a.貨號,b.客戶編號,銷售數量,銷售價,a.稅價合計,銷售日期,'應收'

from 銷售單明細 as a, 銷售單 as b

where a.銷售單號=b.編號

-- 加入歷史

insert into 銷售單歷史 select * from 銷售單

insert into 銷售單明細歷史 select * from 銷售單明細

-- 清除銷售單

delete from 銷售單明細

delete from 銷售單

commit

儲存過程例子

alter proc futurema updageorderdatasdistinguishresult asdeclare connectionstring nvarchar 256 declare server nvarchar 256 declare uid nvarchar 256 dec...

儲存過程例子

create table testtb id varchar2 30 name varchar2 30 insert into testtb values 1 21 insert into testtb values 2 22 insert into testtb values 3 23 inser...

帶游標的儲存過程例子,很經典

create or replace procedure sum storage isplant g containerinv.plant type sloc g containerinv.sloc type part g containerinv.partno type qty g containe...