當前位置:首頁 » 編程語言 » sql進貨表怎麼設置
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql進貨表怎麼設置

發布時間: 2023-05-01 08:18:36

⑴ 請問 sql 做庫存表怎麼做

CREATE TABLE [dbo].[TB_kucun](
[ID] [decimal](18, 0) NOT NULL,
[Huowu_NO] [nchar](10) NOT NULL,
[Huo_Count] [nchar](10) NOT NULL
) ON [PRIMARY]
當有進貨時庫存自動增加 銷售時庫存自動減少
針對不同的貨物,對[Huo_Count] 進行增加或減少就行了。

⑵ SQL資料庫+ 葯品進銷存+怎樣建表和觸發器

1 關於建表
從你的需求來看我覺得需要建4個表
表A 進貨

表B 銷售

表C 庫存

表D 葯品信息

葯品信息這個表很重要 主要存放2個欄位
葯品ID 葯品名
這個葯品ID是作為其他表與葯品信息表的外鍵

2 關於觸發器
我覺得最好不用觸發器 。
而事實上資料庫設計原則之一也是能不用觸發器就不用觸發器。因為觸發器很消耗系統資源。
進貨和出貨的時候,庫存要改變。你可以用多個個SQL語句實現。
比如說:進貨的時候,進貨表要插入信息,而同時庫存表也插入信息
出貨同理

⑶ 有三張表,進貨表、銷售表、庫存表

只要你再建一個商品表~~設置商品編號是主鍵

你的三張表 里也要放上商品編號~並且把商品編號作為商品表裡商品編號的外鍵~~一切都解決了。

--------給你一個我唯芹橋以前做的庫

------------
-開始創建資料庫

create database test
on primary
(name='test_mdf',
filename='F:\SQL server\test.mdf',
size=5,
maxsize=10,
filegrowth=1)
log on
(name='test_ldf',
filename='F:\SQL server\test.ldf',
size=5,
maxsize=10,
filegrowth=1)
--以上創建了一個資料庫名字為「test」,路徑為「F:\SQL server\XXX」其他不做解釋。

use test
go
--開始使用資料庫。

--開始建表
--共7個表,大部分都是NOT NULL,只有極少數後面做觸發器的欄位沒做NOT NULL

--1.下面開始創建貨物表,名字為「goods」,此表給客戶看,好讓他們花錢啊。
--欄位為:
--貨品編號goods_id(主鍵約束),貨品名稱goods_name,貨品單位goods_unit,貨品介紹goods_txt。
create table goods (goods_id int constraint PK_good_id primary key,goods_name varchar(20) not null,goods_unit varchar(6) not null,goods_txt text not null)
go

--2.創建用戶表,名字為「goods_user」,用此表給分配許可權,或者說是限制指猛使用select,必須登陸才能看某項表(思考中暫時不做了,准備在前台實現。)
--欄位為:
--用戶編號(登錄用),用戶密碼,人員姓名,用戶類別,用戶類別只有在資料庫中手動修改,不許擅自改動。
create table goods_user (userid int constraint FK_user_id primary key,user_password varchar(20) not null,user_name varchar(10),user_type varchar(10) not null)
go

--3.創建進貨表,名字為「goods_in」,為倉庫管理員使用。
--欄位為:
--進貨批號in_id(主鍵約束),貨品編號goods_id(外鍵關聯貨物表"goods"),進貨單價in_price(約束>0),
--計量單位goods_unit,進貨數量in_sum(約束>0),總價值in_money,收貨人編號(倉庫首敏管理員)in_who(外鍵聯goods_user的userid)
--再加個時間in_time,默認當前就好。
create table goods_in (in_id int constraint PK_in_id primary key,goods_id int constraint FK_goods_id foreign key references goods(goods_id) not null,in_price money constraint CK_in_price check(in_price>0) not null,goods_unit varchar(6),in_sum int constraint CK_in_sum check(in_sum>0) not null,in_money money,in_who int constraint FK_in_who foreign key references goods_user(userid) not null,in_time datetime constraint DF_in_time default GETDATE())
go

--4.創建出貨表,名字為「goods_out」,為銷售人員使用。
--欄位為:
--銷售編號out_id(主鍵約束),貨品編號goods_id(外鍵關聯貨物表"goods"),銷售單價out_price(約束>0),
--計量單位goods_unit,銷售數量out_sum(約束>0),總價格out_money,銷售人員編號out_who(外鍵聯goods_user的userid)
--建個時間out_time默認當前。
--增加一個狀態欄位goods_now,目的是為了給退貨商品做個標記。
create table goods_out (out_id int constraint PK_out_id primary key,goods_id int constraint FK_goods_id1 foreign key references goods(goods_id) not null,out_price money constraint CK_out_price check(out_price>0) not null,goods_unit varchar(6),out_sum int constraint CK_out_sum check(out_sum>0) not null,out_money money,out_who int constraint FK_in_who1 foreign key references goods_user(userid) not null,out_time datetime constraint DF_out_time default GETDATE(),goods_now varchar(4))
go

--5.創建庫存表,名字為「goods_have」,此表內容准備讓系統自動生成。
--欄位為:
--貨品編號goods_id,庫存數量goods_sum(約束>=0),計量單位goods_unit,庫存價值goods_money(約束>=0)
create table goods_have (goods_id int constraint FK_goods_id3 foreign key references goods(goods_id) not null,goods_sum int constraint CK_goods_sum check(goods_sum>=0) not null,goods_unit varchar(6) not null,goods_money money constraint CK_goods_money check(goods_money>=0))
go

--6.創建利潤表,名字為「goods_win」,此表只允許老闆看。
--欄位為:
--貨品編號goods_id,計量單位goods_unit,銷售總額win_money(約束>=0),進貨金額lose_money(約束>=0),
--利潤率go_win
create table goods_win (goods_id int constraint FK_goods_id4 foreign key references goods(goods_id) not null,goods_unit varchar(6) not null,win_money money constraint CK_win_money check(win_money>=0),lose_money money constraint CK_lose_money check(lose_money>=0),go_win money)
go

--7.補充一個退貨表,或者稱為反庫表「goods_return」
--欄位為:
--退貨批號return_id(主鍵約束),購貨編號out_id(外鍵連接goods_out的「out_id」),退貨原因return_why,退貨時間return_time
create table goods_return (return_id int constraint PK_return_id primary key,out_id int constraint FK_in_id foreign key references goods_out(out_id) not null,return_why text not null,return_time datetime constraint DF_return_time default GETDATE())
go

--下面創建存儲過程1產品表的;2進貨表的;3出貨表的;4用戶表(注冊用戶可以看到的更詳細,老闆可以查看利潤等全部表,員工可以查看與增加自己的出貨表,倉庫管理員可以查看增加進貨表)
--共6個存儲過程

--1.貨品表增存儲過程:
--@goods_id編號,@goods_name貨品名,@goods_unit貨品單位,@goods_txt貨品說明
create procere procere_goods_insert
(@goods_id int,@goods_name varchar(20),@goods_unit varchar(6),@goods_txt text)
as
insert into goods values(@goods_id,@goods_name,@goods_unit,@goods_txt)
go
--2.貨品表刪除貨品的存儲過程:
--@goods_id編號,@goods_name貨品名(必須同時編號和貨物名稱都填對了才可能刪除)
create procere procere_goods_delete
(@goods_id int,@goods_name varchar(20))
as
delete from goods where goods_id=@goods_id and goods_name=@goods_name
go
--3.貨品表修改貨品說明的存儲過程:
--@goods_id編號,@goods_txt貨品說明
create procere procere_goods_update
(@goods_id int,@goods_txt text)
as
update goods set goods_txt=@goods_txt where goods_id=@goods_id
go

--4.創建進貨表增加存儲過程(進貨表不允許出錯另外為了防止倉庫管理員舞弊,不做刪除與修改進貨表的存儲過程):
--@in_id進貨批號,@goods_id貨品編號,@in_price進貨單價,@goods_unit貨品單位,@in_sum進貨數量,@in_money合計金額
--@in_who收貨人編號(倉庫管理員),最後附加當前時間
create procere procere_goods_in
(@in_id int,@goods_id int,@in_price money,@in_sum int,@in_money money,@in_who int)
as
insert into goods_in values(@in_id,@goods_id,@in_price,(select goods_unit from goods where goods.goods_id=@goods_id),@in_sum,@in_money,@in_who,getdate())
go
--5.創建出貨表增加存儲過程(出貨表不允許出錯另外為了防止銷售人員舞弊,不做刪除與修改出貨表的存儲過程):
--@out_id銷售編號,@goods_id貨品編號,@out_price銷售單價,@goods_unit貨品單位,@out_sum銷售數量,@out_money合計金額
--@out_who銷售人員編號,最後附加當前時間
create procere procere_goods_out
(@out_id int,@goods_id int,@out_price money,@out_sum int,@out_money money,@out_who int)
as
insert into goods_out values(@out_id,@goods_id,@out_price,(select goods_unit from goods where goods.goods_id=@goods_id),@out_sum,@out_money,@out_who,getdate(),null)
go

--6.補充一個存儲過程退貨表的。
--@return_id退貨批號,@out_id購貨編號,@return_why退貨原因
create procere procere_goods_return
(@return_id int,@out_id int,@return_why text)
as
insert into goods_return values(@return_id,@out_id,@return_why,getdate())
go

--下面創建觸發器
--共4個觸發器

--1.創建進貨表與出貨表的觸發器,同時修改庫存表的某產品數量和此種產品的總金額;
--為了防止銷售人員或者倉庫管理員造假或誤填貨品價值。
--另外觸發器在這裡面還實現了另一個目的:讓goods表中的goods_nuit欄位內容直接賦予goods_in的相應欄位值避免填寫錯誤或麻煩。
create trigger T_insert_goods_in
on goods_in for insert
as
begin transaction--准備修改進貨表的總金額數量,以防工作人員出現誤差。
update goods_in set in_money=in_price*in_sum,goods_unit=(select goods_unit from goods where goods_id in (select goods_id from inserted)) where in_id in (select in_id from inserted)
if @@error<>0
rollback transaction
else--准備修改庫存表,關鍵修改此次進貨後的某產品總量和總價值。
update goods_have set goods_sum=goods_sum+(select in_sum from inserted),goods_money=goods_money+((select in_price from inserted)*(select in_sum from inserted )) where goods_id in (select goods_id from inserted)
if @@error<>0
rollback transaction
else--准備執行了
commit transaction
go
--進貨表單次某品種進貨價值--觸發器在上面--後期又附加了同時修改庫存表的語句。

--2.出貨表單次某品種進貨價值--觸發器在下面--看來也得加上修改庫存的語句了。
--另外觸發器在這裡面還實現了另一個目的:讓goods表中的goods_nuit欄位內容直接賦予goods_out的相應欄位值。
create trigger T_insert_goods_out
on goods_out for insert
as
begin transaction--防錯系統啟動,就算銷售人員填錯了也會糾正過來。
update goods_out set out_money=out_price*out_sum,goods_unit=(select goods_unit from goods where goods_id in (select goods_id from inserted)) where out_id in (select out_id from inserted)
if @@error<>0
rollback transaction
else--庫存變更
update goods_have set goods_sum=goods_sum-(select out_sum from inserted),goods_money=goods_money-((select goods_money/goods_sum from goods_have where goods_id in (select goods_id from inserted))*(select out_sum from inserted)) where goods_id in (select goods_id from inserted)
if @@error<>0
rollback transaction
else--營業額統計、成本核算、利潤率計算
update goods_win set win_money=win_money+((select out_price from inserted)*(select out_sum from inserted )),lose_money=lose_money+((select goods_money/goods_sum from goods_have where goods_id in (select goods_id from inserted))*(select out_sum from inserted)),go_win=(win_money+((select out_price from inserted)*(select out_sum from inserted ))-(lose_money+((select goods_money/goods_sum from goods_have where goods_id in (select goods_id from inserted))*(select out_sum from inserted))))/(lose_money+((select goods_money/goods_sum from goods_have where goods_id in (select goods_id from inserted))*(select out_sum from inserted)))*100 where goods_id in (select goods_id from inserted)
commit transaction
go
--3.新品上市的時候,由於利潤表和庫存表裡面都沒有新產品的編號等信息,所以必須同時產生一些進貨額、出貨額都是0的數據。
create trigger T_insert_goods
on goods for insert
as
begin transaction
insert into goods_win values((select goods_id from inserted),(select goods_unit from inserted),0,0,0)
if @@error<>0
rollback transaction
else
insert into goods_have values((select goods_id from inserted),0,(select goods_unit from inserted),0)
if @@error<>0
rollback transaction
else
commit transaction
go

--4.補充退貨時的觸發器,當退貨時,對銷售表產生一個小標記miss,另外庫存有影響,利潤表也有影響
create trigger T_insert_goods_return
on goods_return for insert
as
begin transaction--退貨後,銷售表標記miss在相應的欄位上
update goods_out set goods_now='miss' where out_id in (select out_id from inserted)
if @@error<>0
rollback transaction
else--修改庫存表,庫存+相應的退貨量,金額+相應平均成本*退貨數量
update goods_have set goods_sum=goods_sum+(select out_sum from goods_out where out_id in (select out_id from inserted)) ,goods_money=goods_money+(select goods_money from goods_have where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted)))/(select goods_sum from goods_have where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted)))*(select out_sum from goods_out where out_id in (select out_id from inserted)) where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted))
if @@error<>0
rollback transaction
else--利潤率也計算出來了--(問題是這次的利潤率為什麼不要*100就得到百分比的了)------
--此處增加if判斷,如果銷售額是『0』,則,費用和利潤率都為『0』
if ((select win_money from goods_win where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted)))-(select out_money from goods_out where out_id in (select out_id from inserted)))=0
update goods_win set win_money=0,lose_money=0,go_win=0 where goods_id in (select goods_id from goods_out where out_id in(select out_id from inserted))
else
update goods_win set win_money=win_money-(select out_money from goods_out where out_id in (select out_id from inserted)),lose_money=lose_money-(select out_sum from goods_out where out_id in (select out_id from inserted))*(select goods_money from goods_have where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted)))/(select goods_sum from goods_have where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted))),go_win=((win_money-(select out_money from goods_out where out_id in (select out_id from inserted)))-(lose_money-(select out_sum from goods_out where out_id in (select out_id from inserted))*(select goods_money from goods_have where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted)))/(select goods_sum from goods_have where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted))))/(lose_money-(select out_sum from goods_out where out_id in (select out_id from inserted))*(select goods_money from goods_have where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted)))/(select goods_sum from goods_have where goods_id in (select goods_id from goods_out where out_id in (select out_id from inserted)))))*1 where goods_id in (select goods_id from goods_out where out_id in(select out_id from inserted))
if @@error<>0
rollback transaction
else
commit transaction
go
--以上進貨,出貨都搞定了。退貨還不是很完整。

--庫存表思路:編號自己找(在後面整體編組GROUP BY),數量=進貨數-出貨數,價值=進貨價*數量

--利潤表思路:編號自己找,銷售額=SUM(銷售表的銷售額),進貨費用=(進貨表的金額*銷售表的銷售數量),利潤率=(銷售額-進貨費用)/進貨費用

--最後決定庫存表的觸發器同時放在上面的進貨和出貨的存儲過程中了。下面解釋一下:
--進貨時庫存表一定發生變化。我們就找差值就好了數量,總價值;
--同理,出貨時,庫存表也要發生變化。

--為了方便測試在此處做幾個數據
--必須要先填的是goods ,goods_user這兩個表,否則其他的表都無法正常測試。

insert into goods values(1001,'rice','kg','good,if you have had it,you will want it again.')
insert into goods values(1002,'water','tin','very good')
insert into goods_user values(95001,'001','Lucy','xs')
insert into goods_user values(95002,'002','Tom','ck')
insert into goods_user values(95003,'003','Lily','rs')
insert into goods_user values(95004,'004','admin','lb')

⑷ 資料庫SQL的建表問題!

-- 1、 在銷售商品的同時,將記錄庫存中該商品數量減少多少。

CREATE TRIGGER tg_receNO

ON sales FOR update

AS

begin

declare @oldnum int

declare @newnum int

set @oldnum=(select sale_number from deleted)

set @newnum=(select sale_number from inserted)

update stock set stock_number=stock_number-(@newnum-@oldnum)

--@newnum-@oldnum表示商品減少的數量

where dbo.stock.pro_id=(select pro_id from inserted)

end

⑸ sql怎麼建表,需求如下

給你一份我現用的簡單進銷存軟體sql

一、類別(名稱、父類編號、類別編號);
二、商品信息(名稱、類別、編號、條碼、單位、規格、型號、備注);
三、倉庫信息(名稱、編號、地址、聯系人、聯系人電話、備注);
四、單位信息(名稱、單位分類【供貨單位與購買單位】、編號、電話、地址、郵編、傳真、電子郵件、聯系人、備注、初期應收款、累計應收、初期應付、累計應付);
五、進貨/退貨單、銷售/退貨單:
1、主表:(上級訂單號(為介面開發預留),單據編號、單據日期、開單時間、單據類型(進貨/退貨單、銷售/退貨單、其他出庫、其他入庫)、單位名稱、操作人、發貨(收貨)倉庫、備注) 收款金額、收款賬戶;
2、從表:(商品編號、商品名稱、單位、數量、單價、金額、單價備注);
六、收款單(包括付款單):(單據編號、單據日期、開單時間、單據類型(收款單、付款單)、單位名稱、操作人、優惠金額、備注,賬戶編號)
七、結算賬戶(賬戶編號、賬戶名稱、初期金額、當前余額、賬戶備注);(用戶本人結算賬戶)
八、用戶信息【職員信息】(職員編號、職員名稱、電話、地址、備注、員工角色);
九、角色表(角色編號、角色名稱、許可權編號等)
十、許可權表(許可權編號、許可權名稱等)
十一、零售單:(與五共用表)
1、主表:(上級訂單號(為介面開發預留),單據編號、單據日期、開單時間、單據類型(進貨/退貨單、銷售/退貨單、其他出庫、其他入庫、零售單)、單位名稱、操作人、實收金額、抹零金額、發貨(收貨)倉庫、備注) ;
2、從表:(商品編號、商品名稱、單位、數量、單價、金額、折扣、折後單價、折後金額、單價備注);
十二、庫存表(inventory)
(商品編號goodsCode、商品名稱GoodsName、商品單位goodsUnit、期初數量beginNum、期初成本金額beginUnitPrice、初期庫存金額beginTotalMoney、庫存數量inventoryNum、售價inventoryPrice、庫存金額inventoryTotalMoney,倉庫編號warehouseCode)

⑹ 如何做到SQL資料庫新建一個視圖lsjxj將兩個表進貨商品表jhsp和銷售商品表lsxssp合並顯示

create view lsjxj as
select j.spid,j.sl as jsl,j.zje as jzje, x.sl as xsl, x.zje as xzje from jhsp as j join lsxssp as x on j.spid=x.spid

⑺ SQL資料庫創建一個表,問題是那個進貨價<零售價怎麼寫要用分析查詢器寫。

它只是告訴你進貨價<零售價,又沒有叫你創建一個叫做「進貨價<零售價」的列,你按照它給你的數據創建一個表就好了,商品編號那列設為主鍵,其他的列照樣輸入即可。