From 27574fc507435fc2ed5e9fa99ecd6df8d0d7eb10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E5=88=A9=E7=BE=A4?= <2246026162@qq.com> Date: Wed, 12 Oct 2022 21:18:41 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E5=8D=81=E4=BA=8C=E6=AC=A1=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\350\247\246\345\217\221\345\231\250.sql" | 59 +++++++++ ...0\345\255\230\350\277\207\347\250\213.sql" | 123 ++++++++++++++++++ ...10\350\247\246\345\217\221\345\231\250.md" | 32 +++++ ...30\345\202\250\350\277\207\347\250\213.md" | 95 ++++++++++++++ 4 files changed, 309 insertions(+) create mode 100644 "32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-10-10\350\247\246\345\217\221\345\231\250.sql" create mode 100644 "32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-10-7\345\202\250\345\255\230\350\277\207\347\250\213.sql" create mode 100644 "32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-10-10\350\247\246\345\217\221\345\231\250.md" create mode 100644 "32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-10-7\345\255\230\345\202\250\350\277\207\347\250\213.md" diff --git "a/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-10-10\350\247\246\345\217\221\345\231\250.sql" "b/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-10-10\350\247\246\345\217\221\345\231\250.sql" new file mode 100644 index 0000000..72f90fa --- /dev/null +++ "b/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-10-10\350\247\246\345\217\221\345\231\250.sql" @@ -0,0 +1,59 @@ +select * from Department +select * from People + +--(1)假设有部门表和员工表,在添加员工的时候,该员工的部门编号如果在部门表中找不到,则自动添加部门信息, +--部门名称为"新部门"。 +go + create trigger tri_newpeo + on People for insert + as + if not exists(select * from Department where DepartmentId=(select DepartmentId from inserted)) + begin + insert into Department values ((select DepartmentId from inserted),'新部门') + end + go + insert into People(DepartmentId,PeopleName,PeopleSex,PeopleSalary) values ('005','张三','男',5000) + +--(2)触发器实现,删除一个部门的时候将部门下所有员工全部删除。 +go + create trigger tri_deldep + on Department for delete + as + delete from People where DepartmentId=(select DepartmentId from deleted) + go + delete from Department where DepartmentId='005' +--(4)修改一个部门编号之后,将该部门下所有员工的部门编号同步进行修改 +go + create trigger tri_deldepid + on Department for update + as + update People set DepartmentId=(select DepartmentId from inserted) where DepartmentId=(select DepartmentId from deleted) + go + update Department set DepartmentId='006' where DepartmentId='005' + + -- 游标一般是放在存储过程中使用 +select * from Department +select * from People +--总经办-1000 市场部员工工资-2000 +--用存储过程和游标 +go +create proc pro_outmon +as +declare cur_addmon cursor scroll for select DepartmentName from People inner join Department on People.DepartmentId=Department.DepartmentId +open cur_addmon +declare @dename varchar(20) +fetch first from cur_addmon into @dename +while (@@FETCH_STATUS=0) +begin + if @dename='总经办' + begin + update People set PeopleSalary-=1000 where DepartmentId=(select DepartmentId from Department where DepartmentName=@dename) + end + else if @dename='市场部' + begin + update People set PeopleSalary-=2000 where DepartmentId=(select DepartmentId from Department where DepartmentName=@dename) + end + fetch next from cur_addmon into @dename +end +go +exec pro_outmon \ No newline at end of file diff --git "a/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-10-7\345\202\250\345\255\230\350\277\207\347\250\213.sql" "b/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-10-7\345\202\250\345\255\230\350\277\207\347\250\213.sql" new file mode 100644 index 0000000..270314a --- /dev/null +++ "b/32\351\231\206\345\210\251\347\276\244/\344\275\234\344\270\232/2022-10-7\345\202\250\345\255\230\350\277\207\347\250\213.sql" @@ -0,0 +1,123 @@ +use BankTest + + +--1. 定义存储过程实现查询出账户余额最低的银行卡账户信息,显示银行卡号,姓名,账户余额 +select * from BankCard +go +-- drop proc proc_getMinMoney +create proc proc_getMinMoney +@minMoney money output +as +begin + select @minMoney = MIN(CardMoney) from BankCard + select CardNo,RealName,CardMoney from BankCard b + join AccountInfo a on a.AccountId = b.AccountId + where CardMoney = @minMoney +end +go + +declare @minMoney money +exec proc_getMinMoney @minMoney output + + + +--2. 模拟银行卡存钱操作,传入银行卡号,存钱金额,实现存钱操作 +select * from CardExchange +go +create proc proc_getInMoney +@cardNo varchar(50), +@inMoney money +as +begin + insert into CardExchange values(@cardNo,@inMoney,0,GETDATE()) + +end +go +-- +declare @cardNo varchar(50) = '6225125478544587', + @inMoney money = 8848 +exec proc_getInMoney @cardNo,@inMoney +select * from CardExchange + + + +--3. 模拟银行卡取钱操作,传入银行卡号,取钱金额,实现取钱操作,取钱成功,返回1,取钱失败返回-1 +select * from BankCard +go +-- drop proc proc_outMoney + +create proc proc_outMoney +@cardNum varchar(50), +@outMoney money, +@backNum int output +as +begin + select @backNum = (case when CardMoney >= @outMoney then 1 else -1 end) from BankCard + where CardNo = @cardNum + update BankCard set CardMoney -= @outMoney where CardNo = @cardNum +end +go +--执行 +declare @cardNum varchar(50) = '6225547854125656', +@outMoney money = 1000, +@backNum int +exec proc_outMoney @cardNum,@outMoney,@backNum output +select @backNum +select * from BankCard + + +--4. 查询出某时间段的银行存取款信息以及存款总金额**,取款总金额, +--传入开始时间,结束时间,显示存取款交易信息的同时,返回存款总金额,取款总金额。 +select * from CardExchange --交易记录 + +-- drop proc proc_getBankMessage +go +create proc proc_getBankMessage +@openTime smalldatetime, +@overTime smalldatetime, +@InSum money output, +@OutSum money output +as +begin + select @InSum = SUM(MoneyInBank),@OutSum = SUM(MoneyOutBank) from CardExchange + where ExchangeTime between @openTime and @overTime +end +go + +declare @openTime smalldatetime = '2022-09-07 14:30:00', +@overTime smalldatetime = '2022-09-27 08:19:00', +@InSum money,@OutSum money + +exec proc_getBankMessage @openTime,@overTime,@InSum output,@OutSum output +select @InSum 存款总额,@OutSum 取款总额 + + +--5. **密码升级**,传入用户名和密码,如果用户名密码正确,并且密码长度<8,自动升级成8位密码 +--(提示:随机生成 0-9 的整数: float(rand()*10)) rand():随机生成0.0-1.0的小数 float:向下取整) + +-- drop proc proc_pwd +-- update BankCard set CardPwd = '123456' where AccountId = 1 +go +create proc proc_pwd +@cardNo varchar(50), +@pwd varchar(50) +as +begin + if((select CardNo from BankCard where CardNo = @cardNo) != ' ' + and @pwd = (select CardPwd from BankCard where CardNo = @cardNo and @pwd = CardPwd)) + begin + if(len(@pwd) < 8) + begin + update BankCard set CardPwd = CONCAT(ROUND(99999+RAND()*99999,0),ROUND(RAND()*9,0),ROUND(RAND()*9,0)) where CardNo = @cardNo + end + end + else + begin + print '错误了X_X' + end +end +go +-- 执行 +declare @cardNo varchar(50) = '6225125478544587',@pwd varchar(50) = '123456' +exec proc_pwd @cardNo,@pwd +select * from BankCard diff --git "a/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-10-10\350\247\246\345\217\221\345\231\250.md" "b/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-10-10\350\247\246\345\217\221\345\231\250.md" new file mode 100644 index 0000000..69362fb --- /dev/null +++ "b/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-10-10\350\247\246\345\217\221\345\231\250.md" @@ -0,0 +1,32 @@ +### 瑙﹀彂鍣 + +#### DEL瑙﹀彂鍣 + +1. ##### after瑙﹀彂鍣 + + ###### 鍒涘缓瑙﹀彂鍣 + + ``` + CREATE TRIGGER <瑙﹀彂鍣ㄥ悕绉> + + ON table_name + FOR [DELETE, INSERT, UPDATE] + + AS + + T-SQL璇彞 + + GO + --WITH ENCRYPTION琛ㄧず鍔犲瘑瑙﹀彂鍣ㄥ畾涔夌殑SQL鏂囨湰 + + --DELETE, INSERT, UPDATE鎸囧畾瑙﹀彂鍣ㄧ殑绫诲瀷 + + 1.鎻掑叆鎿嶄綔锛圛nsert锛 + ***\*inserted 琛╘****鏈夋暟鎹紝***\*deleted 琛╘****鏃犳暟鎹 + + 2.鍒犻櫎鎿嶄綔锛圖elete锛 + ***\*inserted 琛╘****鏃犳暟鎹紝***\*deleted 琛╘****鏈夋暟鎹 + + 3.鏇存柊鎿嶄綔锛圲pdate锛 + ***\*inserted 琛╘****鏈夋暟鎹紙鏂版暟鎹級锛***\*deleted 琛╘****鏈夋暟鎹紙鏃ф暟鎹級 + ``` \ No newline at end of file diff --git "a/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-10-7\345\255\230\345\202\250\350\277\207\347\250\213.md" "b/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-10-7\345\255\230\345\202\250\350\277\207\347\250\213.md" new file mode 100644 index 0000000..8aee8e0 --- /dev/null +++ "b/32\351\231\206\345\210\251\347\276\244/\347\254\224\350\256\260/2022-10-7\345\255\230\345\202\250\350\277\207\347\250\213.md" @@ -0,0 +1,95 @@ +### 鍗佷竴銆佸瓨鍌ㄨ繃绋 + +甯歌鐨勭郴缁熷瓨鍌ㄨ繃绋嬫湁 + +``` +sp_databases 鍒楀嚭鏈嶅姟涓婄殑鎵鏈夋暟鎹簱 +sp_helpdb --鎶ュ憡鏈夊叧鎸囧畾鏁版嵁搴撴垨鎵鏈夋暟鎹簱鐨勪俊鎭 +sp_renamedb 鏇存敼鏁版嵁搴撶殑鍚嶇О +sp_tables --杩斿洖褰撳墠鐜涓嬪彲鏌ヨ鐨勫璞$殑鍒楄〃 +sp_columns 杩斿洖鏌愪釜琛ㄥ垪鐨勪俊鎭 +sp_help --杩斿洖鏌愪釜琛ㄧ殑鎵鏈変俊鎭 +sp_helpconstraint 鏌ョ湅鏌愪釜琛ㄧ殑绾︽潫 +sp_helpindex --鏌ョ湅鏌愪釜琛ㄧ殑绱㈠紩 +sp_stored_procedures 鍒楀嚭褰撳墠鐜涓殑鎵鏈夊瓨鍌ㄨ繃绋 +sp_password --娣诲姞鎴栦慨鏀圭櫥褰曡处鎴风殑瀵嗙爜 +sp_rename 閲嶅懡鍚嶅瓨鍌ㄨ繃绋 +sp_helptext 鏄剧ず榛樿鍊硷紝鏈姞瀵嗙殑瀛樺偍杩囩▼銆佺敤鎴峰畾涔夌殑瀛樺偍杩囩▼銆佽Е鍙戝櫒鎴栬鍥剧殑瀹為檯鏂囨湰銆 +``` + +##### 鑷畾涔夊瓨鍌ㄨ繃绋 + +**鍒涘缓瀛樺偍杩囩▼** + +1.娌℃湁杈撳叆鍙傛暟锛屾病鏈夎緭鍑哄弬鏁扮殑瀛樺偍杩囩▼銆 + +``` +create proc <瀛樺偍杩囩▼鍚嶇О> +as + +go +``` + +缁冧範锛 瀹氫箟瀛樺偍杩囩▼鏌ヨ 骞撮緞鏈灏忕殑瀛︾敓淇℃伅 + +2.鏈夎緭鍏ュ弬鏁帮紝娌℃湁杈撳嚭鍙傛暟鐨勫瓨鍌ㄨ繃绋 + +``` +create proc <瀛樺偍杩囩▼鍚嶇О> +<鍙橀噺1> <鏁版嵁绫诲瀷> +<鍙橀噺2> <鏁版嵁绫诲瀷> +... +as + +go +``` + +3.鏈夎緭鍏ュ弬鏁帮紝娌℃湁杈撳嚭鍙傛暟锛屼絾鏄湁杩斿洖鍊肩殑瀛樺偍杩囩▼锛堣繑鍥炲煎繀椤绘暣鏁帮級銆 + +``` +create proc <瀛樺偍杩囩▼鍚嶇О> +<鍙橀噺1> <鏁版嵁绫诲瀷> +<鍙橀噺2> <鏁版嵁绫诲瀷> +... +as + +return 鏁存暟 +go +``` + +4.鏈夎緭鍏ュ弬鏁帮紝鏈夎緭鍑哄弬鏁扮殑瀛樺偍杩囩▼ & 涓涓彉閲忓叿澶囧悓鏃惰緭鍏ヨ緭鍑哄弬鏁扮殑瀛樺偍杩囩▼ + +``` +create proc <瀛樺偍杩囩▼鍚嶇О> +<鍙橀噺1> <鏁版嵁绫诲瀷> output +<鍙橀噺2> <鏁版嵁绫诲瀷> output +... +as + +return 鏁存暟 +go +``` + +**鎵ц瀛樺偍杩囩▼** + +``` +--鏃犲弬 +exec <瀛樺偍杩囩▼鍚嶇О> +--甯﹀弬 +exec <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,... +--甯﹀弬甯﹁繑鍥炲 +declare @鍙橀噺 +exec @鍙橀噺 = <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,... +--鏈夎緭鍏ュ弬鏁帮紝鏈夎緭鍑哄弬鏁扮殑瀛樺偍杩囩▼ +declare @鍙橀噺 +exec <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,@鍙橀噺 output +--涓涓彉閲忓悓鏃跺叿澶囪緭鍏ヨ緭鍑哄姛鑳 +declare @鍙橀噺 <鏁版嵁绫诲瀷> = 鍊 +exec <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,@鍙橀噺 output +``` + +**鍒犻櫎瀛樺偍杩囩▼** + +``` +drop procedure <瀛樺偍杩囩▼鍚嶇О> +``` \ No newline at end of file -- Gitee