sql.sql

来自「固定资产管理信息系统,虽然还有些不足,但基本功能已实现!希望大家多多改进!」· SQL 代码 · 共 330 行

SQL
330
字号

drop database ASSETSMANAGEDB

create database ASSETSMANAGEDB

use ASSETSMANAGEDB
 --执行了----
drop table T_USER  
create table T_USER
(
   UID VarCHAR(4) primary key,
   UNAME VarCHAR(10) NOT NULL,
   UPWD VarCHAR(6) NOT NULL,
   UTYPE SMALLINT NOT NULL
)

insert into T_USER values('C001','thp520','520134',1)
insert into T_USER values('C002','abc','654321',2)
insert into T_USER values('S003','hzm','123456',3)

select*from T_USER

delete from T_USER

update T_USER set UPWD = 123456 where UNAME = 'hzm'


--创建一个存储过程来自动的增加数据库的数据 
--===当用户要增加用户表中的记录时,应当调用此存储过程用来增加表(T_USER)中的记录===========
CREATE PROCEDURE PR_T_USER	
(
  @UNAME VarCHAR(10),
  @UPWD VarCHAR(6),
  @UTYPE SMALLINT
)
AS 
BEGIN
   DECLARE @UID INT
   DECLARE @STR CHAR(4)
   SET @UID=(SELECT COUNT(*) FROM T_USER)
   IF (floor(@UID/10)=0)
     BEGIN 
        SET @STR='C00'+CONVERT(CHAR(3),@UID)
      --  INSERT INTO T_USER VALUES(@STR,@UNAME,@UPWD,@UTYPE)
     END  
   IF ((floor(@UID/10)>0) AND (floor(@UID/10)<10))
     BEGIN
        SET @STR='C0'+CONVERT(CHAR(3),@UID)
      --  INSERT INTO T_USER VALUES(@STR,@UNAME,@UPWD,@UTYPE)
     END 
   IF ((floor(@UID/10)>=10) AND (floor(@UID/10)<100))
     BEGIN
        SET @STR='C'+CONVERT(CHAR(3),@UID)
     --   INSERT INTO T_USER VALUES(@STR,@UNAME,@UPWD,@UTYPE)
     END
   IF (@UID>1000) 
     BEGIN
        PRINT '数据库中记录以满,请修改存储过程'
     END
   INSERT INTO T_USER VALUES(@STR,@UNAME,@UPWD,@UTYPE)
END 


--测试语句
select * from T_USER

exec PR_T_USER @UNAME='hzm',@UPWD='123456',@UTYPE=3
exec PR_T_USER @UNAME='thp520',@UPWD='520134',@UTYPE=2
exec PR_T_USER @UNAME='大林',@UPWD='520134',@UTYPE=1


DROP TABLE T_USER
DROP PROC PR_T_USER

--==========================================================================================
 
--创建资产类别表
--此表主要用来查询,动态的维护资产的类别
--例如:现在想增加一个类别,我就只需要在此表中增加一条记录,然后就可以在前台进行自动的更新

--执行了----
create table T_ASSET_TYPE
( 
   TYPE_CODE CHAR(1) PRIMARY KEY,      --资产类别代号
   TYPE_NAME CHAR(20) NOT NULL         --资产类别的名称
)

insert into T_ASSET_TYPE values('C','教学设备')
insert into T_ASSET_TYPE values('T','管理设备')
insert into T_ASSET_TYPE values('F','办公室设备')

delete from T_ASSET_TYPE where TYPE_CODE=''

--测试语句
SELECT * FROM T_ASSET_TYPE

DROP TABLE T_ASSET_TYPE

--==========================================================================================

--创建部门表
--此表主要用来查询,检索,动态的维护部门的类别
--例如:现在想增加一个类别,我就只需要在此表中增加一条记录,然后就可以在前台进行自动的更新

--执行了----
create table T_DEPARTMENT
(
  DEP_CODE CHAR(1) PRIMARY KEY,        --部门代号
  TYPE_NAME CHAR(20) NOT NULL          --部门名称
)

insert into T_DEPARTMENT values('S','软件学院')
insert into T_DEPARTMENT values('M','民政系')
insert into T_DEPARTMENT values('Y','艺术系')
insert into T_DEPARTMENT values('K','康复系')
insert into T_DEPARTMENT values('J','经贸系')
insert into T_DEPARTMENT values('B','宾仪系')

--测试语句
SELECT * FROM T_DEPARTMENT 

delete from T_DEPARTMENT where DEP_CODE = ''

DROP TABLE T_DEPARTMENT

--==========================================================================================



--执行了----
drop table T_ASSET_MAIN

CREATE TABLE T_ASSET_MAIN
(
  ASSET_CODE VARCHAR(6) PRIMARY KEY,
  ASSET_NAME VARCHAR(20), 
  USE_DEP VARCHAR(20),
  BUY_TIME DATETIME,
  ASSENT_QUANTITY   INT,
  ASSENT_PRICE  MONEY,
  BUY_MAN VARCHAR(10),
  BURDEN_MAN VARCHAR(10),
  USE_MAN VARCHAR(10),
  ADD_DATE DATETIME,
  ADD_REN VARCHAR(10),
  ASSET_TYPE VARCHAR,
  BAK VARCHAR(200)
)

insert into T_ASSET_MAIN values('CS001','电脑','软件学院','2006-4-29',2,3800,'陈小飞','徐刚强','谭海鹏','2006-4-29','谭海鹏','1','this is a good computer')
insert into T_ASSET_MAIN values('CS002','电脑','软件学院','2006-4-30',2,4800,'陈小飞','徐刚强','谭海鹏','2006-4-30','谭海鹏','1','this is a good computer')
insert into T_ASSET_MAIN values('CS003','房屋','软件学院','2006-4-30',2,14800,'陈小飞','徐刚强','谭海鹏','2006-4-30','谭海鹏','3','this is a good computer')
insert into T_ASSET_MAIN values('CM001','电脑','民政系','2006-4-29',2,3800,'陈小飞','徐刚强','谭海鹏','2006-4-29','谭海鹏','2','this is a good computer')
insert into T_ASSET_MAIN values('CJ002','电脑','经贸系','2006-4-30',2,4800,'陈小飞','徐刚强','谭海鹏','2006-4-30','谭海鹏','4','this is a good computer')
insert into T_ASSET_MAIN values('CY003','房屋','艺术系','2006-4-30',2,14800,'陈小飞','徐刚强','谭海鹏','2006-4-30','谭海鹏','3','this is a good computer')
insert into T_ASSET_MAIN values('CK003','房屋','康复系','2006-4-30',2,14800,'陈小飞','徐刚强','谭海鹏','2006-4-30','谭海鹏','2','this is a good computer')
insert into T_ASSET_MAIN values('YK001','房屋','宾仪系','2006-5-5',2,14800,'陈小飞','徐刚强','谭海鹏','2006-5-5','谭海鹏','2','this is a good computer')


Select * from T_ASSET_MAIN Where USE_DEP = '软件学院' 

delete from T_ASSET_MAIN ASSET_CODE =  'Cs002'

delete from T_ASSET_MAIN where ASSET_CODE =  'Cs002'

select*from T_ASSET_MAIN

--创建一个存储过程用来增加资产登记表(T_ASSET_MAIN)中的记录。并使自动的匹配和增加。形如:CS001,CS002
--当程序员需要在资产登记表(T_ASSET_MAIN)中的记录时,应该调用次存储过程,以完成组合、键ID的增加。
CREATE PROCEDURE PR_T_ASSET_MAIN
(
  @TYPE CHAR(1),               --用来传递一个字母
  @DEPARTMENT CHAR(1),         --用来传递第二字母
  @ASSET_NAME VarCHAR(20),        
  @USE_DEP VarCHAR(20),           
  @BUY_TIME DATETIME, 
  @ASSENT_QUANTITY   INT,   
  @ASSENT_PRICE  MONEY,      
  @BUY_MAN VarCHAR(10),           
  @BURDEN_MAN CHAR(10),        
  @USE_MAN VarCHAR(10),           
  @ADD_DATE DATETIME,          
  @ADD_REN VarCHAR(10),           
  @ASSET_TYPE VarCHAR,            
  @BAK VARCHAR(200)            
)
AS 
BEGIN
   DECLARE @UID INT
   DECLARE @STR CHAR(6)
   SET @UID=(SELECT COUNT(*) FROM T_ASSET_MAIN)
   IF (floor(@UID/10)=0)
     BEGIN 
        SET @STR=@TYPE+@DEPARTMENT+'00'+CONVERT(CHAR(3),@UID)
     END  
   IF ((floor(@UID/10)>0) AND (floor(@UID/10)<10))
     BEGIN
        SET @STR=@TYPE+@DEPARTMENT+'0'+CONVERT(CHAR(3),@UID)  
     END 
   IF ((floor(@UID/10)>=10) AND (floor(@UID/10)<100))
     BEGIN
        SET @STR=@TYPE+@DEPARTMENT+CONVERT(CHAR(3),@UID)
     END
   IF (@UID>1000) 
     BEGIN
        PRINT '数据库中记录以满,请修改存储过程'
     END
   INSERT INTO T_ASSET_MAIN
             VALUES( 
                     @STR,
                     @ASSET_NAME,  
                     @USE_DEP, 
                     @BUY_TIME,
                     @ASSENT_QUANTITY,
                     @ASSENT_PRICE,
                     @BUY_MAN,
                     @BURDEN_MAN,
                     @USE_MAN,
                     @ADD_DATE,
                     @ADD_REN,
                     @ASSET_TYPE,
                     @BAK
                    )
END 


--测试语句
SELECT * FROM T_ASSET_MAIN

insert into T_ASSET_MAIN values('CS001','电脑','软件学院','2006-4-29',2,3800,'陈小飞','徐刚强','谭海鹏','2006-4-29','谭海鹏','1','this is a good computer')
insert into T_ASSET_MAIN values('CS002','电脑','软件学院','2006-4-30',2,4800,'陈小飞','徐刚强','谭海鹏','2006-4-30','谭海鹏','1','this is a good computer')
insert into T_ASSET_MAIN values('CS003','房屋','软件学院','2006-4-30',2,14800,'陈小飞','徐刚强','谭海鹏','2006-4-30','谭海鹏','3','this is a good computer')
insert into T_ASSET_MAIN values('CM001','电脑','民政系','2006-4-29',2,3800,'陈小飞','徐刚强','谭海鹏','2006-4-29','谭海鹏','2','this is a good computer')
insert into T_ASSET_MAIN values('CJ002','电脑','经贸系','2006-4-30',2,4800,'陈小飞','徐刚强','谭海鹏','2006-4-30','谭海鹏','4','this is a good computer')
insert into T_ASSET_MAIN values('CY003','房屋','艺术系','2006-4-30',2,14800,'陈小飞','徐刚强','谭海鹏','2006-4-30','谭海鹏','3','this is a good computer')
insert into T_ASSET_MAIN values('CK003','房屋','康复系','2006-4-30',2,14800,'陈小飞','徐刚强','谭海鹏','2006-4-30','谭海鹏','2','this is a good computer')
insert into T_ASSET_MAIN values('YK001','房屋','宾仪系','2006-5-5',2,14800,'陈小飞','徐刚强','谭海鹏','2006-5-5','谭海鹏','2','this is a good computer')


EXEC  PR_T_ASSET_MAIN @TYPE='C',@DEPARTMENT='S',@ASSET_NAME='IUJ',@USE_DEP='HGJK',@BUY_TIME=2006,@BUY_MAN='JHKJ',@BURDEN_MAN='UGG',@USE_MAN='GJ',@ADD_DATE=2006,@ADD_REN='CXF',@ASSET_TYPE='1',@BAK='CXF'

DROP TABLE T_ASSET_MAIN
DROP PROC PR_T_ASSET_MAIN

DELETE FROM T_ASSET_MAIN


--==========================================================================================

--创建报废登记表
CREATE TABLE T_SCRAP
(
  ASSET_CODE VARCHAR(6) PRIMARY KEY FOREIGN KEY REFERENCES T_ASSET_MAIN(ASSET_CODE),   --资产登记表中的ID
  ASSET_NAME VARCHAR(20) NOT NULL,                                         --资产名称
  TYPE_NAME VARCHAR(20) NOT NULL,                                          --部门名称
  SCRAP_MAN VARCHAR(10) NOT NULL,                                          --报废人
  ASSET_PRICE MONEY NOT NULL,                                           --资产净值
  SCRAP_CAUSE VARCHAR(200),                                             --报废的原因说明
  SCRAP_DATE DATETIME NOT NULL,                                         --报废登记的时间
  ADD_NAME VARCHAR(10),                                                    --登记人
  BAK VARCHAR(200)                                                      --备注说明
)

drop table T_SCRAP
--创建更改资产登记表(T_ASSET_MAIN)中资产状态记录(ASSET_TYPE)的触发器(TRI_T_SCRAP)
CREATE TRIGGER TRI_T_SCRAP
ON T_SCRAP
FOR INSERT
AS 
BEGIN
   DECLARE @ASSET_CODE CHAR(6)
   SET @ASSET_CODE=(SELECT ASSET_CODE FROM INSERTED)
   UPDATE T_ASSET_MAIN SET ASSET_TYPE='3' WHERE ASSET_CODE=@ASSET_CODE
END


--利用存储过程进行增加报废登记表中的记录,并执行触发器(TRI_T_SCRAP)

--测试语句
SELECT * FROM T_SCRAP
INSERT INTO T_SCRAP VALUES ('CS001','CXF','CXF',1520.5,'CXF',2006,'SA','CXF')  
INSERT INTO T_SCRAP VALUES ('CS011','CXF','CXF',1520.5,'CXF',2006,'SA','CXF')  --有可能产生外键约束


DELETE FROM T_SCRAP

--==========================================================================================

--创建资产转移表
CREATE TABLE T_TRANSFER
( 
  ASSET_CODE VarCHAR(6) PRIMARY KEY FOREIGN KEY REFERENCES T_ASSET_MAIN(ASSET_CODE),  --转出资产在资产登记表的ID
  ASSET_NAME VARCHAR(20) NOT NULL,
  O_DEP VarCHAR(20) NOT NULL,               --转出部门的名称
  I_DEP VarCHAR(20) NOT NULL,               --转入部门的名称
  TRANSFER_DATE DATETIME NOT NULL,       --转移的日期
  ADD_NAME VarCHAR(10),                     --
  BAK VARCHAR(200)
)

--创建一个触发器
CREATE TRIGGER TRI_T_TRANSFER
ON T_TRANSFER
FOR INSERT
AS 
BEGIN
   DECLARE @ASSET_CODE CHAR(6)
   SET @ASSET_CODE=(SELECT ASSET_CODE FROM INSERTED)
   UPDATE T_ASSET_MAIN SET ASSET_TYPE='4' WHERE ASSET_CODE=@ASSET_CODE
END

--测试语句
SELECT * FROM T_TRANSFER
DROP TABLE T_TRANSFER
DELETE FROM T_TRANSFER

DROP TRIGGER TRI_T_TRANSFER

INSERT INTO T_TRANSFER VALUES ('CS001','CXF','CXF',2001,'CXF','CXF')

--在此处的插入说明:
--当在资产转移表(T_TRANSFER)中插入条记录时,会触发触发器,
--并且要在此处调用存储过程(PR_T_ASSET_MAIN)
--从业务的逻辑处理层传来相应的参数给次存储过程。
--例如:
--例子开始的SQL查询语句
INSERT INTO T_TRANSFER VALUES ('CS002','CXF','CXF',2006,'CXF','CXF')
EXEC  PR_T_ASSET_MAIN @TYPE='B',@DEPARTMENT='E',@ASSET_NAME='IUJ',@USE_DEP='HGJK',@BUY_TIME=2006,@BUY_MAN='JHKJ',@BURDEN_MAN='UGG',@USE_MAN='GJ',@ADD_DATE=2006,@ADD_REN='CXF',@ASSET_TYPE='1',@BAK='CXF'
--例子结素
--例子注释:次处为了演示的方便,将@TYEP,@DEPARTMENT,等参数写死了,其

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?