diff --git "a/17\345\220\264\346\226\207\351\276\231/\344\275\234\344\270\232/SQLQuery2.sql" "b/17\345\220\264\346\226\207\351\276\231/\344\275\234\344\270\232/SQLQuery2.sql" new file mode 100644 index 0000000000000000000000000000000000000000..f3f1d2acbc6aaf3bb49109fa01f797043fbb2dbd --- /dev/null +++ "b/17\345\220\264\346\226\207\351\276\231/\344\275\234\344\270\232/SQLQuery2.sql" @@ -0,0 +1,88 @@ +--1. 定义存储过程实现查询出账户余额最低的银行卡账户信息,显示银行卡号,姓名,账户余额 +select * from BankCard +select * from AccountInfo +create proc proc_name +as +begin + select CardNo,realname,Cardmoney from BankCard join AccountInfo on AccountInfo.AccountId=BankCard.AccountId + where Cardmoney=(select min(CardMoney)from BankCard) +end +exec proc_name +--2. 模拟银行卡存钱操作,传入银行卡号,存钱金额,实现存钱操作 +select * from CardExchange +create proc proc_No +@Cardnum varchar(20), +@Inmoney money +as +begin + update BankCard set Cardmoney+=@Inmoney where CardNo=@Cardnum + insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime) + values(@Cardnum,@Inmoney,0,GETDATE()) +end +exec proc_No'6225125478544587','2000' +--3. 模拟银行卡取钱操作,传入银行卡号,取钱金额,实现取钱操作,取钱成功,返回1,取钱失败返回-1 +create proc proc_GeiMoneyBank +@cardNo varchar(30), +@MoneyOutBank money +as +begin + update BankCard set CardMoney-=@MoneyOutBank where CardNo=@cardNo + if (@@ERROR!=0) + return -1 + insert into CardExchange (CardNo,MoneyInBank,MoneyOutBank,ExchangeTime) + values (@cardNo,@MoneyOutBank,0,GETDATE()) + return 1 +end + declare @MoneyOutBank int + exec @MoneyOutBank = proc_GeiMoneyBank '6225547854125656',1000 + print @MoneyOutBank + drop proc proc_GeiMoneyBan + +--4. **查询出某时间段的银行存取款信息以及存款总金额**,取款总金额,传入开始时间,结束时间,显示存取款交易信息的同时,返回存款总金额,取款总金额。 +select * from CardExchange +create proc proc_time +@Intime smalldatetime, +@Outtime smalldatetime, +@Inmoney money output, +@outmoney money output +as +begin + select @Inmoney=sum(MoneyInBank),@outmoney=sum(MoneyOutBank) from CardExchange where ExchangeTime between @Intime and @Outtime + select * from CardExchange +where ExchangeTime between @Intime and @Outtime +end + +declare @Inmoney money +declare @outmoney money +exec proc_time '2022-09-20','2022-09-20',@Inmoney output,@outmoney output +drop proc proc_time +--5. **密码升级**,传入用户名和密码,如果用户名密码正确,并且密码长度<8,自动升级成8位密码 +create proc proc_out +@cardno varchar(20) , +@num varchar (20) output +as +begin + if not exists(select * from BankCard where CardNo=@cardno and CardPwd=@num) + set @num = '' + else + begin + if len(@num) < 8 + begin + declare @len int = 8- len(@num) + declare @i int = 1 + while @i <= @len + begin + + set @num = @num + cast(FLOOR(RAND()*10) as varchar(1)) + set @i = @i+1 + end + update BankCard set CardPwd = @num where CardNo=@cardno + end + end +end +go +declare @pwd nvarchar(20) = '123456' +exec proc_out '6225547854125656',@pwd output +select @pwd + +--(提示:随机生成 0-9 的整数: float(rand()*10)) rand():随机生成0.0-1.0的小数 float:向下取整) \ No newline at end of file diff --git "a/17\345\220\264\346\226\207\351\276\231/\347\254\224\350\256\260/\345\255\230\345\202\250\350\277\207\347\250\213(Stored Procedure).md" "b/17\345\220\264\346\226\207\351\276\231/\347\254\224\350\256\260/\345\255\230\345\202\250\350\277\207\347\250\213(Stored Procedure).md" new file mode 100644 index 0000000000000000000000000000000000000000..696fd0264a32e37be4e0e0ecc0504117e88dfa58 --- /dev/null +++ "b/17\345\220\264\346\226\207\351\276\231/\347\254\224\350\256\260/\345\255\230\345\202\250\350\277\207\347\250\213(Stored Procedure).md" @@ -0,0 +1,109 @@ +## 瀛樺偍杩囩▼(Stored Procedure) +#### 浠涔堟槸瀛樺偍杩囩▼ +瀛樺偍杩囩▼鏄**棰勭紪璇**SQL璇彞闆嗗悎锛岃繖浜涜鍙ュ瓨鍌ㄥ湪涓涓悕绉帮紙瀛樺偍杩囩▼鐨勫悕绉帮級涓嬪苟浣滀负鍗曞厓鏉ュ鐞嗐傚瓨鍌ㄨ繃绋嬩唬鏇夸簡浼犵粺鐨勯愭潯鎵цSQL璇彞鐨勬柟寮忥紝涓涓瓨鍌ㄨ繃绋嬩腑鍙互鍖呭惈鏌ヨ銆佹彃鍏ャ佸垹闄ゃ佹洿鏂扮瓑鎿嶇旱鐨勪竴绯诲垪SQL璇彞锛屽綋杩欎釜瀛樺偍杩囩▼琚皟鐢ㄦ墽琛屾椂锛岃繖浜涙搷浣滀篃浼氬悓鏃舵墽琛屻 + +灏佽濂 --> 璋冪敤 +#### 瀛樺偍杩囩▼鐨勫垎绫 + +##### 绯荤粺瀛樺偍杩囩▼ + + 绯荤粺瀛樺偍杩囩▼鏄敤鏉ョ鐞哠QL Server涓庢樉绀烘湁鍏虫暟鎹簱鍜岀敤鎴风殑淇℃伅鐨勫瓨鍌ㄨ繃绋嬨 +甯歌鐨勭郴缁熷瓨鍌ㄨ繃绋嬫湁 +```sql +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.娌℃湁杈撳叆鍙傛暟锛屾病鏈夎緭鍑哄弬鏁扮殑瀛樺偍杩囩▼銆 +```sql +create proc <瀛樺偍杩囩▼鍚嶇О> +as + +go +``` + +2.鏈夎緭鍏ュ弬鏁帮紝娌℃湁杈撳嚭鍙傛暟鐨勫瓨鍌ㄨ繃绋 + +```sql +create proc <瀛樺偍杩囩▼鍚嶇О> +<鍙橀噺1> <鏁版嵁绫诲瀷> +<鍙橀噺2> <鏁版嵁绫诲瀷> +... +as + +go +``` + + + +3.鏈夎緭鍏ュ弬鏁帮紝娌℃湁杈撳嚭鍙傛暟锛屼絾鏄湁杩斿洖鍊肩殑瀛樺偍杩囩▼锛堣繑鍥炲煎繀椤绘暣鏁帮級銆 +```sql +create proc <瀛樺偍杩囩▼鍚嶇О> +<鍙橀噺1> <鏁版嵁绫诲瀷> +<鍙橀噺2> <鏁版嵁绫诲瀷> +... +as + +return 鏁存暟 +go +``` + +4.鏈夎緭鍏ュ弬鏁帮紝鏈夎緭鍑哄弬鏁扮殑瀛樺偍杩囩▼ & 涓涓彉閲忓叿澶囧悓鏃惰緭鍏ヨ緭鍑哄弬鏁扮殑瀛樺偍杩囩▼ +```sql +create proc <瀛樺偍杩囩▼鍚嶇О> +<鍙橀噺1> <鏁版嵁绫诲瀷> output +<鍙橀噺2> <鏁版嵁绫诲瀷> output +... +as + +return 鏁存暟 +go +``` + +**鎵ц瀛樺偍杩囩▼** +```sql +--鏃犲弬 +exec <瀛樺偍杩囩▼鍚嶇О> +--甯﹀弬 +exec <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,... +--甯﹀弬甯﹁繑鍥炲 +declare @鍙橀噺 +exec @鍙橀噺 = <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,... +--鏈夎緭鍏ュ弬鏁帮紝鏈夎緭鍑哄弬鏁扮殑瀛樺偍杩囩▼ +declare @鍙橀噺 +exec <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,@鍙橀噺 output +--涓涓彉閲忓悓鏃跺叿澶囪緭鍏ヨ緭鍑哄姛鑳 +declare @鍙橀噺 <鏁版嵁绫诲瀷> = 鍊 +exec <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,@鍙橀噺 output +``` + +**鍒犻櫎瀛樺偍杩囩▼** +```sql +drop procedure <瀛樺偍杩囩▼鍚嶇О> +``` + +#### 瀛樺偍杩囩▼鐨勪紭鐐 +鍏佽妯″潡鍖栫▼搴忚璁 +鎵ц閫熷害鏇村揩 +鍑忓皯缃戠粶娴侀氶噺 +鎻愰珮绯荤粺瀹夊叏鎬 + +#### 瀛樺偍杩囩▼涓庡嚱鏁扮殑鍖哄埆 +1.鍌ㄥ瓨杩囩▼鍙互鏈夎繑鍥炲间篃鍙互鏃犺繑鍥炲笺傚嚱鏁板繀椤绘湁杩斿洖鍊笺 +2.瀛樺偍杩囩▼鐨勫疄鐜版瘮杈冨鏉傦紝鑰屽嚱鏁扮殑瀹炵幇姣旇緝鏈夐拡瀵规с +3.鍌ㄥ瓨杩囩▼鍙互杈撳叆杈撳嚭鍙傛暟锛岃屽嚱鏁板彧鍙互杈撳叆鍙傛暟銆 +4.杩囩▼鍏佽鍦ㄥ叾涓夋嫨浠ュ強DML璇彞锛岃屽嚱鏁板彧鍙互鍦ㄥ叾涓璼elect璇彞銆 +5.鍙互鍦ㄥ瓨鍌ㄨ繃绋嬩腑璋冪敤鍑芥暟锛屼笉鍙互鍦ㄥ嚱鏁颁腑璋冪敤瀛樺偍杩囩▼銆 +6.鍑芥暟鍙互浣滀负鏉′欢鍦ㄨ鍙ヤ腑浣跨敤锛屼絾鏄瓨鍌ㄨ繃绋嬩笉鍙互銆 \ No newline at end of file